• ベストアンサー

VBAで検索条件式の書き方教えて下さい。

access2000で作っています。 売上TBに 顧客ID,売上日付,商品名,単価,数量・・・とデザインされていて既に数十件データが登録されています。 別のフォームからこのデータを参照する部分を どうしてもVBAで書かなければならなくなりました。 条件はフォームに入力された顧客IDと入力された年月と売上日付の年月が一致しているもの(日は無視)の抽出 というものです。 条件式で下記の rs.Find "[顧客ID]=' & "Me![顧客ID] & "' & and " 顧客IDだけが同じという所まではわかるのですが 年月日が登録されている物に対して年月だけ一致したものを条件式に加えるにはどのようにすればよいのでしょうか?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

SQL = SQL & "FORMAT([年月日], "YYYYMM") = " の部分は SQL = SQL & "FORMAT([年月日], ""YYYYMM"") = " のように " を重ねて "" のようにするか、 SQL = SQL & "FORMAT([年月日], 'YYYYMM') = " " の代わりに ' を使うと正常に動作すると思います。

mehiro2
質問者

補足

早速のお返事ありがとうございます。 コンパイルエラーは無くなったのですが、 rs.Find SQLのところで 引数が間違った型、許容範囲外または競合していますのエラーとなります。 SQLの内容は、 SQL="[顧客ID]='3' and Format([売上年月日],'YYYYMM')=200308"となっているのは、正常なのでしょうか? 勉強不足ですみません。 ちなみにADOを使っているのですが問題ないのでしょうか?

その他の回答 (3)

  • ducati
  • ベストアンサー率29% (308/1062)
回答No.4

条件指定の「200308」に「'」(シングルクォーテーション)付くようにしてみてください。 コード上から書くとすると 変数に一度フォームからの値を入れたとして strA=Me![年月日] として 条件を "Format([売上年月日],'YYYYMM')='" & strA & "'" とくくってみてください。 これでいけるはずです。

mehiro2
質問者

お礼

お世話になりました。 せっかく教えていただきましたが なぜか上手くいかなかったので、 別の方法を考えて見ます。 またお世話になることがありましたらよろしくお願い申し上げます

mehiro2
質問者

補足

お返事遅くなりすみませんでした。 やはり rs.Find SQLの部分で 引数が間違った型、許容範囲外または競合していますのエラーになります。ウォッチでは SQL="[顧客ID]='3' and Format([売上年月],'YYYYMM')='200308'" となりました 参照元のテーブルにはデータが入っていますし型も日付型になっているのですがなぜなんでしょうか? サンプルとしてこのように記述しているのですが・・・ rs.Open "売上TB", cn, adOpenStatic, dLockReadOnly rs.MoveFirst Do Until rs.EOF rs.Find SQL ここでエラーになる If rs.EOF Or IsNull(rs!前回使用量) = True Then Exit Do Else   以下省略 どうぞよろしくお願いします

回答No.3

あぁ、なるほど、確かにそうですね。 SQL = SQL & FORMAT(Me![年月日], "YYYYMM") の部分は、 SQL = SQL & """ & FORMAT(Me![年月日], "YYYYMM") & """ のようにしなければならないですね。 ADO でも問題ないと思いますよ。

mehiro2
質問者

お礼

お世話になりました。 せっかく教えていただきましたが なぜか上手くいかなかったので、 別の方法を考えて見ます。 またお世話になることがありましたらよろしくお願い申し上げます

mehiro2
質問者

補足

何度もすみません。 やはり同じエラーになってしまいます。 SQL="[顧客ID]='3' and Format([売上年月日],'YYYYMM')=200308"とウォッチされるのはだめなんでしょうか? SQL="[顧客ID]='3' and Format([売上年月日],'YYYYMM')=Me![年月日],'YYYYMM')"とウォッチされるのが本当でしょうか? お忙しいところ申し訳ございません

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.1

年月日のフィールドがDATEタイプと仮定してお答えします。 DIM SQL As String SQL = "[顧客ID]=' & " & Me![顧客ID] & "' & and " SQL = SQL & "FORMAT([年月日], "YYYYMM") = " SQL = SQL & FORMAT(Me![年月日], "YYYYMM") rs.Find SQL で行けると思いますが。

mehiro2
質問者

お礼

お世話になりました。 せっかく教えていただきましたが なぜか上手くいかなかったので、 別の方法を考えて見ます。 またお世話になることがありましたらよろしくお願い申し上げます

mehiro2
質問者

補足

さっそくのお返事ありがとうございます。 SQL = SQL & "FORMAT([年月日], "YYYYMM") = " の部分でコンパイルエラーになってしまうのです SQL = "[顧客ID]=' & " & Me![顧客ID] & "' & and " SQL = SQL & FORMAT(Me![年月日], "YYYYMM はOKなのですが・・・

関連するQ&A

専門家に質問してみよう