• 締切済み

Access2007 DoCmd.ApplyFilterのAnd条件について

お世話になっております。 下記のフィルタはそれぞれ単独で機能しています。 DoCmd.ApplyFilter , "(コード Like '" & Me.コード1 & "')" DoCmd.ApplyFilter , "日付 between #" & 開始 & "# and #" & 終了 & "#" これをAndでフィルタリングしたいのですが、たとえばこのようにすると構文エラーとなります。 DoCmd.ApplyFilter , "(コード Like '" & Me.コード1 & "') and (日付 between #" & 開始 & "# and #" & 終了 & "#)" Andとしてはこのようにすれば機能することから、between以下がおかしいと思うのですが、自分ではわかりませんでした。 DoCmd.ApplyFilter , "(コード Like '" & Me.コード1 & "') and (コード Like '" & Me.コード2 & "')" ご教授いただければ幸いです。よろしくお願いいたします。

みんなの回答

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> Andでフィルタリングしたいのですが、たとえばこのようにすると構文エラーとなります。 提示された式に合うテキストボックスを作成して、同じ式で動作確認してみましたが、 『コード1・開始・終了のすべてに条件を指定』した場合、エラーは発生しませんでした。 (フィルタが正しく適用される) 一方、『コード1・開始・終了の少なくとも1つが空欄(Null)』の場合は、確かに構文 エラーが発生しました。 もしも、やりたい内容が「コード1のみを指定した場合は日付を無視」といったことだと したら、少し仕組みを考える必要があります。 以下、参考までに一例を提示します: (「開始」のみ指定時は「開始以降のもの」を、「終了」のみ指定時は「終了以前の  もの」を、それぞれ抽出する形にしてみました) Private Sub フィルタ実行_Click()     'コマンドボタンを想定しました 'エラーが発生した場合の対応を宣言(→「エラー処理:」の行に飛ぶ) On Error GoTo エラー処理   '変数を宣言   Dim strFilter As String, iCode As Byte, iHead As Byte, iTail As Byte   'それぞれの入力状態を確認   iCode = IIf(IsNull(コード1), 0, 1)   iHead = IIf(IsNull(開始), 0, 2)   iTail = IIf(IsNull(終了), 0, 4)      '入力状態に合わせてフィルタ式を作成   Select Case iCode + iHead + iTail     Case 0   '0+0+0:全て空白       MsgBox "先に条件を指定してください。", , "確認"       GoTo 終了処理     Case 1   '1+0+0:コード1のみ入力       strFilter = "コード Like '" & Me.コード1 & "'"     Case 2   '0+2+0:開始のみ入力       strFilter = "日付 >= #" & 開始 & "#"     Case 3   '1+2+0:コード1と開始を入力       strFilter = "(コード Like '" & コード1 & "') And (日付 >= #" & 開始 & "#)"     Case 4   '0+0+4:終了のみ入力       strFilter = "日付 <= #" & 終了 & "#"     Case 5   '1+0+4:コード1と終了を入力       strFilter = "(コード Like '" & コード1 & "') And (日付 <= #" & 終了 & "#)"     Case 6   '0+2+4:開始と終了を入力       strFilter = "日付 Between #" & 開始 & "# And #" & 終了 & "#"     Case 7   '1+2+4:全て入力       strFilter = "(コード Like '" & コード1 & "') And (日付 Between #" & 開始 & "# And #" & 終了 & "#)"   End Select   'フィルタを適用   DoCmd.ApplyFilter , strFilter 終了処理:   '処理を抜ける   Exit Sub エラー処理:   'エラーが発生した場合はメッセージを表示して終了処理に移動   MsgBox Err & ":" & Error$, , Me.Name & " フィルタ実行"   Resume 終了処理 End Sub ・・・以上です。 なお、現状では『コード』については『コード1』テキストボックスに「2」を指定すると 「コード=2」の完全一致検索になります。 (「2*」を指定すれば先頭一致、「*2」なら後方一致、「*2*」ならあいまい検索) もしかしたら意図的にそうされたのかもしれませんが、もし常にあいまい検索を希望 されるようでしたら、コード部分については   "コード Like '*" & コード1 & "*'" という構文が必要になりますので、蛇足まで。

kami21
質問者

お礼

ご回答をありがとうございました。 『コード1・開始・終了のすべてに条件を指定』した場合でもエラーが出ますし、参考の通りにやってみましたが、やはり同じエラーが出ました。 開始、終了は非連結のテキストボックスですので、それが原因なのでしょうか? 構文エラーというところから、between 以下の書き方に問題があるような気がしています。 お返事が遅くなりまして、すみませんでした。 ありがとうございました。

関連するQ&A

専門家に質問してみよう