質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

643閲覧

最大数を取り出し数値を比較したい

No77

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/01/27 10:35

編集2021/01/28 01:37

初めまして、
VBAのクエリで最大数値と エクセルのセルの数値を比較してエクセル側の数値がDBと比較して多いときのみ
最大数です。と表示させたいのですが、現在は
数値を比較して、多くても少なくても同じ結果になり、最大数です。 のメッセージがでます。

降順にはしてるのですが、何かsetできていないので ただ並べ替えただけの状態なのではと考えていますが
具体的にどうすればいいかわからず、、申し訳ありませんが
アドバイスをどうかお願いいたします。

※追加箇所:ここから
DBはACCESSになります。データベースの定義は
販売合計 テーブルは

伝票番号 整数
枝番 整数
受注番号 可変長
コード 文字列
数量 倍精度
単価 金額
調整額 金額

販売データ テーブルは

伝票番号 整数
得意先コード 文字列
発行日 日付
納品日 日付
請求月度 整数
売上額 金額
消費税 金額
調整額 金額
となります。
※ここまで 

VBAコード

1Public Const 最大数注意行 As Long = 1 2Public Const 受管_最大発注警告列 As Integer = 14 3Public Const 数量列 As Integer = 14 4 5 6 If Cells(最大数注意行, 最大数注意列).Value <> 1 Then 7 QryString = "SELECT TOP 1 販売データ.数量" _ 8 & " FROM 販売データ" _ 9 & " LEFT JOIN 販売合計 ON(販売データ.伝票番号 = 販売合計.伝票番号)" _ 10 & " WHERE ((販売データ.コード)" _ 11 & " OR (販売データ.コード NOT LIKE '1%' AND 販売データ.得意先コード = '" & Trim$(Cells(対象行I, 得意先コード列).Value) & "'))" _ 12 & " AND 販売データ.数量 > " & 数量i _ 13 & " ORDER BY 販売データ.数量 DESC" 14 rstData.Open Source:=QryString, ActiveConnection:=ConI, CursorType:=adOpenStatic 15 16 17 If QryString > Trim$(Cells(対象行I, 数量列).Value) Then 18 19 rstData.Open Source:=QryString, ActiveConnection:=ConI, CursorType:=adOpenStatic 20 21 22 If QryString > Trim$(Cells(対象行I, 数量列).Value) Then 23 If MsgBox("最大数です" & vbCrLf & "中断しますか?", vbYesNo) = vbYes Then 24 Set rstData = Nothing 25 26 Exit Sub 27 Else 28 MsgBox ("進みます") 29 30 End If 31 End If 32 rstData.Close 33 End If

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/01/27 10:44

対象のDBはACCESSですか?タグもそうですがテーブル定義も提示されたほうが良いです
No77

2021/01/27 11:12

初心者ですみません。アドバイス有難うございます。
m.ts10806

2021/01/27 11:14

「質問への追記修正依頼」です。 指摘内容は質問編集して返してください。
guest

回答1

0

ベストアンサー

コードの抜粋のようですので、コードの正誤の判断はできませんが、
下記のコードを挿入して実行してから、イミディエイトウィンドウを確認してみれば、
期待する結果にならない理由は分かると思います。

vba

1 '前略 2 3 Debug.Print QryString 'これを挿入 4 If QryString > Trim$(Cells(対象行I, 数量列).Value) Then 5 6 7 '後略

次に下記のように修正してから、実行してみてください。

vba

1 '前略 2 3 Debug.Print rstData!数量 'これを挿入 4 If rstData!数量 > Trim$(Cells(対象行I, 数量列).Value) Then 5 6 7 '後略

投稿2021/01/27 12:47

hatena19

総合スコア33790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

No77

2021/01/28 01:46

お世話になっております。情報が不足しているのにもかかわらず、アドバイスをありがとうございます。 Debug.Print rstData!数量 を追加しましたら empty が返りました。 クエリ文を見直し修正しましたところ数値が入るところまで行きました。 この取り出した数値は現在見ている 比較したい数値 と 同じ数を比較している状態になりました。 If 数量i> Trim$(Cells(対象行I, 数量列).Value) Then ( 数量i は 5 セルの値も 5 と) 両方比較したい対象となっております。 過去のデータ と 現在のセルの値を比較したいのですが、 top 1にしているからダメなのでしょうか?
hatena19

2021/01/28 02:20

SQLでは、数量で降順にして TOP 1 を取得してますので、数量の最大値になると思いますが、そうなってませんか。 実際のテーブルデータやセルデータの情報がないのでこれ以上のアドバイスは難しいです。
No77

2021/01/28 03:11

アドバイスをありがとうございました。 異なる数値を取り出したり、sql文が全くできていないことに原因がありそうですので、 debugの方法を教えていただきまして、これを活用して取り出してやってみます。 自分で説明がうまくできないところもありましたのにもかかわらず アドバイスをありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問