- 締切済み
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 & "')" ご教授いただければ幸いです。よろしくお願いいたします。
- kami21
- お礼率61% (50/81)
- その他(データベース)
- 回答数1
- ありがとう数4
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- DexMachina
- ベストアンサー率73% (1287/1744)
> 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 & "*'" という構文が必要になりますので、蛇足まで。
関連するQ&A
- Access2007 DoCmd.ApplyFilterについて
お世話になっております。 このように書けばコード1のみが抽出されますが、1以上にしたい場合はどのように書けば良いのでしょうか。 (0以外を指定したいと思います) DoCmd.ApplyFilter , "(コード Like '1')" ご教授いただければ幸いです。よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- DoCmd.ApplyFilter引数を文字にする
いつもお世話になっています。 以下のフィルタを作成して使っています。 Private Sub to12_Click() DoCmd.ApplyFilter , "([部署コード] = 1 And [社員番号]=2)" DoCmd.OpenForm "F_登録" Set Forms!F_登録.Recordset = Me.Recordset End Sub DoCmd.ApplyFilter , "([部署コード] = 1 And [社員番号]=2)" の [社員番号]にテキストを使用することになりました。 元テーブルも数値型からテキスト型に変更したのですが、 こうした検索の式に反映するにはどうしたらいいのでしょうか。 お力添えをお願いいたします。
- ベストアンサー
- その他(データベース)
- ★アクセス2002★DoCmd.ApplyFilterの記述
先日同じような質問をして回答頂きましたが再度お願いします。 住所検索フォームを作成中です。 住所検索フォームにテキストボックス[検索値]を配置して、[検索値]に入力した語句で始まるレコードを表示させています。[抽出開始]コマンドボタンに下記の様に記述していますが、これだと[住所]の頭の文字でしか抽出できません。[検索値]に入力する語句は必ずしも頭の文字ではないので、途中の一部の語句でもヒットするようにしたいのですが、上手く記述できずに困っています。 DoCmd.ApplyFilter , "[住所] Like '" & Forms![住所テーブル一覧]![検索値] & "*'"
- ベストアンサー
- その他(データベース)
- Access2007 サブフォームでのフィルタ方法(DoCmd.ApplyFilter)
お世話になっております。 フォームAに検索ボックスを作り、検索ボタンを押すと下記のようにフィルタをかけています。 Private Sub 検索_Click() DoCmd.ApplyFilter , "(分類名 Like '*" & Me.検索語 & "*')" End Sub このフォームAをフォームBのサブフォームとして使いたいのですが、そこで検索を実行すると”実行時エラー2491”が出てフィルタができません。 (フォームAとフォームB間のリンクはありません) 他の方法でもいいのですが、サブフォームでフィルタを実行したいと思います。 ご教授いただければ幸いです。よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- 【アクセスVBA】テーブルにフィルタをかけたい
Sub マクロ() DoCmd.OpenTable "Tテーブル", acViewNormal, acEdit DoCmd.ApplyFilter , "番号 = '123'" End Sub Tテーブルを開き、フィルタをかけたいのですが テーブルを開くまではできるのですが、 フィルタをかける行では 『ApplyFilter アクションの実行はキャンセルされました。』 になってしまいます。 DoCmd.OnFilter , "質問番号 = '0'" でもエラーになり、コードの実行すら行えません。 フォームではなくテーブルにフィルタをかけるにはどうすればいいでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 両方の条件でフィルターをかけたいです
こんにちは。 今、フォームに別々に条件を指定し、抽出するようにしております。 (1) Private Sub コマンド65_Click() DoCmd.ApplyFilter , "[会場名] like '*" & Me.テキスト63 & "*' " Me.FilterOn = True Exit Sub Err_コマンド65_Click: MsgBox Err.Description End Sub (2) Private Sub コマンド70_Click() f_status = "施工日 >= '" & 開始日 & "'" f_status = f_status & " AND 施工日 <= '" & 終了日 & "'" Me.Filter = f_status Me.FilterOn = True End Sub 今の状態では正常に動くのですが、 条件が、(1)かつ(2)という条件でフィルターをかけなければ ならない、と作成してから気づきました。 いろいろやってみたのですが、 どれもエラーになるばかりで。。。
- ベストアンサー
- その他(データベース)
- ACCESSのFILTERについて教えてください。
いつも、お世話になっております。 以下について教えてください。 会社内のシステムのデータからACCESSでリンクを張って、日付(テキスト型)の絞り込み機能を作りたいと思い、以下のようにPGをくんだのですが、「直前の操作は取り消されました」と出て原因がわかりません。 (ちなみにYYYYMMDDの形で入力します。) Me.Filter = "[日付] >= " & Me.txt_開始 & "And" & "[日付] <= " & Me.txt_終了 Me.FilterOn = True BETWEENでやってみても同じでうまくいきませんでした。 すみませんが、原因とうまく行く対処法を教えてください。 お願いします。
- ベストアンサー
- オフィス系ソフト
- 日付型と文字列型、両方にフィルタをするには
アクセス フォームで日付型(Between and)と文字列型、両方にフィルタをするには? Private Sub cmd_ボタン1_Click() Me.Form.Filter = _ "日付 Between #" & Me.cmb_日付1.Value & "# And #" & Me.cmb_日付2.Value & "#" & _ " and 会社名 like " & "*" & Me.cmb_会社名.Value & "*" Me.Form.FilterOn = True End Sub これのどこが変なのか教えていただけますか? 実行時エラー3075「クエリ式の構文エラー:演算子がありません。」というエラーになります。
- ベストアンサー
- オフィス系ソフト
- DLookup関数 アクセス
開始日 2012/4/1 2013/4/1 終了日 2013/3/31 2014/3/31 金額 100,000 200,000 というテーブルのデータがある場合、 日付が2012/6/1なら 2012/4/1と2013/3/31の間だから、100,000を返す、 日付が2013/6/1なら 2013/4/1と2014/3/31の間だから、200,000を返す というvbaコードを作るにはどうすればいいでしょうか? Debug.Print DLookup("[金額]", "Tテーブル", "[開始日] = #2013/06/01# And [終了日] = #2013/06/01#") にすると、nullが返ってしまいますし 二つのフィールドをまたがってBetween andの使い方もわかりません。 コードを教えてください。ご教授よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Accessのフィルタについて
Access2000を使っています。 フォームに配置した「TextBox1」と「TextBox2」(両者とも日付/時刻型)を引数として指定範囲の抽出をすべく Me.Filter="検索結果 Between #"& TextBox1 &"# And #"& TextBox2 &"#" Me.FilterOn=True (「検索結果」はテーブルに配置したフィールドに連結) のコードをボタンのクリックイベントに設定しました。 ところが、例えば「TextBox1」に「01/02/03」、また、「TextBox2」に「01/05/04」を入力して、ボタンをクリックしても抽出されません。 フォームに戻って、フォームのプロパティで確認するとフィルタの欄に 「検索結果 Between #01/02/03# And #01/05/04#」と表示されておりコードに間違いはないと思われますが、フォームフィルタをかけてみると、検索結果のテキストボックスに「Between #03/01/02# And #04/01/05#」という具合に日付が「日/年/月」に置き変わって表示されています。これがコードを実行しても抽出されない原因だと思われるのですか、何故、このように日付が変わってしまうのでしょうか。また、どうすれば変わらないようにできるのでしょうか。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
お礼
ご回答をありがとうございました。 『コード1・開始・終了のすべてに条件を指定』した場合でもエラーが出ますし、参考の通りにやってみましたが、やはり同じエラーが出ました。 開始、終了は非連結のテキストボックスですので、それが原因なのでしょうか? 構文エラーというところから、between 以下の書き方に問題があるような気がしています。 お返事が遅くなりまして、すみませんでした。 ありがとうございました。