2つの選択をOr、とAndに分けて操作したい

このQ&Aのポイント
  • 質問文章からセンセーショナルなタイトルを30文字前後で生成
  • 現在、考えてorの場合とandの場合とIF文で作ってみましたが、うまくいきません。どうぞお知恵を拝借願えないでしょうか。
  • 2つの選択をOr、とAndに分けて操作したい方法について相談です。
回答を見る
  • ベストアンサー

2つの選択をOr、とAndに分けて操作したい

現在、考えてorの場合とandの場合とIF文で作ってみましたが、うまくいきません。どうぞお知恵を拝借願えないでしょうか。 Private Sub 検証_Click() If "[ステータス]= '" & Me.[ステータスリスト&] Then Me.Filter = "[ステータス] = '" & Me.ステータスリスト & "' Or " & "[申請内容]='" & Me.申請リスト & "'" Me.FilterOn = True If "[ステータス]= '" & Me.[申請内容&] Then Me.Filter = "[ステータス] = '" & Me.ステータスリスト & "' Or " & "[申請内容]='" & Me.申請リスト & "'" Me.FilterOn = True Else Me.Filter = "[申請内容] = '" & Me.ステータスリスト & "' Or " & "[申請内容]='" & Me.申請リスト & "'" End If End If Me.Filter = "[ステータス] = '" & Me.ステータスリスト & "'and " & "[申請内容]='" & Me.申請リスト & "'" Me.FilterOn = True End Sub

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

いちおう、1から4まで一つに してみました。抽出の状況を 確認してみてください。 Private Sub コマンド13_Click()   Dim strFil As String   If IsNull(Me.ステータスリスト) And IsNull(Me.申請リスト) Then     MsgBox ("コンボボックスの選択がされていません")     Exit Sub   End If   If Not IsNull(Me.ステータスリスト) And IsNull(Me.申請リスト) Then     strFil = "[ステータス] ='" & Me![ステータスリスト] & "'"   End If   If IsNull(Me.ステータスリスト) And Not IsNull(Me.申請リスト) Then     strFil = "[申請内容] = '" & Me.申請リスト & "'"   End If   If Not IsNull(Me.ステータスリスト) And Not IsNull(Me.申請リスト) Then     If MsgBox("二つの条件でAND検索をしますか", vbYesNo) = vbYes Then       MsgBox ("二つの条件でAND検索をします")       strFil = "[ステータス] = '" & Me.ステータスリスト & "'and " & "[申請内容]='" & Me.申請リスト & "'"     Else       MsgBox ("二つの条件でOR検索をします")       strFil = "[ステータス] = '" & Me.ステータスリスト & "' Or " & "[申請内容]='" & Me.申請リスト & "'"     End If   End If   Me.Filter = strFil   Me.FilterOn = True End Sub

chi_ko6262
質問者

お礼

ドンピシャの回答で驚いています。本当にありがとうございます。ここまで来ると神様みたいに感じちゃいます。後は自分のものにしていきたいと思います。今後とも、宜しくお願い致します。

その他の回答 (4)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

If "[ステータス]= '" & Me.[ステータスリスト&] Then Me.Filter = "[ステータス] = Me.申請リスト & " '" Me.FilterOn = True これは、 If "[ステータス]= '" & Me.[ステータスリスト] & Then Me.Filter = "[ステータス] = Me.ステータスリスト & " '" Me.FilterOn = True という、意味ですかね。 一応、したいことは、分かりますが、 >If "[ステータス]= '" & Me.[ステータスリスト] & Then これは、 If Me![ステータス]=Me.[ステータスリスト] Then としても、Accessはスルーしてしまうので、 この場合、Or と And を混在させて検索するのは 無理なので、 1 「ステータスリスト」が選択されずに「申請リスト」  だけが選択されている場合は「申請リスト」に  符合するデータを表示。  (つまり、「ステータスリスト」はNullの状態) 2 「申請リスト」が選択されずに「ステータスリスト」  だけが選択されている場合は「ステータスリスト」に  符合するデータを表示。  (つまり、「申請リスト」はNullの状態) 3 両方選択されている場合にAND検索。 4 両方選択されている場合にOR検索。 が考えられるフィルタのかけ方です。 1から3までは一つのボタンで作成できますが、 4は別個のボタン、またはチェックボックス などでフィルタの切り替えを行なう必要が あります。 なお、4は単にANDをORにするだけですが。 このように、なります。コードは簡単なのですが、 まだ、どういう結果がほしいのか確認ができて いないような気がするのですが、どうでしょうか。 一度、それぞれについて、コードを表示して みますので、確かめてみますか?

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

連投ですみません。 手元ではフローチャートで条件を分岐 させると分かりやすいです。なお、三角や 四角の図は書く必要はなく、単に条件間は 線で結んで分岐させて確認してみてください。 その上で、箇条書きにしてみてください。

chi_ko6262
質問者

補足

何やら自分でも構文が変だと思い書き直してみました。 内容としては、ステータスリストのステータスのみの検索と 申請リストの申請内容のみの検索 そしていままで行ってきた2種類のANDけんさくです。 焦っていたせいか質問がおかしくなってしまいました。すみません。 Private Sub 検証_Click() If "[ステータス]= '" & Me.[ステータスリスト&] Then Me.Filter = "[ステータス] = Me.申請リスト & " '" Me.FilterOn = True If "[申請内容]= '" & Me.[申請リスト&] Then Me.Filter = "[申請内容] = Me.申請リスト & " '" Me.FilterOn = True End If End If Me.Filter = "[ステータス] = '" & Me.ステータスリスト & "'and " & "[申請内容]='" & Me.申請リスト & "'" Me.FilterOn = True End Sub ご助言宜しくお願いいたします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

書き忘れましたが、 この条件のときのときにフィルタをかける。 というものを箇条書きにして、それに見合った IF文を構築していくという段取りをとると、見通しが よくなるのですが。そうしないと複雑な条件設定は 単にコードを構築していくと往々にしてはまってしまいます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

およそのことは分かりますが、 IF文の入れ子とフィルタのかけ方が、妙なので、 言葉で、箇条書きにしてみては、どうですか? IF文の中にどのような条件のIF文をいれたいのか。

関連するQ&A

  • AND、OR文にすると選択後の編集が出来ない

    Private Sub 選択_Click() If NewRecord Then MsgBox "編集できません。選択しなおしてください。" Me.Undo End If End Sub 上記の命令が効いていないようです。メッセージも出ません。 Private Sub 編集_Click() Dim strFil As String strFil = "[選択]=" & True DoCmd.OpenForm "編集F", , , strFil 'DoCmd.Close acForm, "スタート画面F" '選択.Value = Null End Sub 上記のスタート画面は消したくないので’を付けてあります。 選択.Value=Null でコンパイルエラーが発生していますので’を付けています。 Private Sub 検証_Click() Dim strFil As String If IsNull(Me.ステータスリスト) And IsNull(Me.申請リスト) Then MsgBox ("コンボボックスの選択がされていません") Exit Sub End If If Not IsNull(Me.ステータスリスト) And IsNull(Me.申請リスト) Then strFil = "[ステータス] ='" & Me![ステータスリスト] & "'" End If If IsNull(Me.ステータスリスト) And Not IsNull(Me.申請リスト) Then strFil = "[申請内容] = '" & Me.申請リスト & "'" End If If Not IsNull(Me.ステータスリスト) And Not IsNull(Me.申請リスト) Then If MsgBox("二つの条件でAND検索をしますか", vbYesNo) = vbYes Then MsgBox ("二つの条件でAND検索をします") strFil = "[ステータス] = '" & Me.ステータスリスト & "'and " & "[申請内容]='" & Me.申請リスト & "'" Else MsgBox ("二つの条件でOR検索をします") strFil = "[ステータス] = '" & Me.ステータスリスト & "' Or " & "[申請内容]='" & Me.申請リスト & "'" End If End If Me.Filter = strFil Me.FilterOn = True End Sub 上記はそのままです。 選択のチェックボックスにチェックを入れてもそのデータが編集画面に反映されない現象が発生してしまいました。どこが悪いのか教えて頂ければ幸いです。

  • Me.FilterOn = True は先でも後で

    Me.FilterOn = True は先でも後でも問題ないですか? アクセスのvbaでフォームにフィルタをかけるときに 今まで --------------------------------------- Private Sub コマンド2_Click() Me.Filter = "フィールド = '" & "test" & "'" Me.FilterOn = True End Sub --------------------------------------- とコードを書いていましたが --------------------------------------- Private Sub コマンド2_Click() Me.FilterOn = True Me.Filter = "フィールド = '" & "test" & "'" End Sub --------------------------------------- でも機能しました。 という事は、 Me.FilterOn = Trueは Me.Filter の前でも問題ないのでしょうか? Me.FilterOn = Trueは Me.Filter の後と習ったので疑問に思っています。 よろしくお願いいたします。

  • accessの検索フォームについて(複数条件)

    access初心者です。 本などを参考に検索フォームを作成しました。 1つの条件で検索することは出来たのですが、複数の条件を入力するとうまく検索出来ません。 全ての条件を満たすデータの抽出を行いたいと思います。 「あ」「い」「う」というテキストボックスを用意しています。 Private Sub コマンド14_Click() If Not IsNull(Me.txt_あ) Then ' Me.Filter = "あ LIKE '*" & Me!txt_あ & "*'" End If If Not IsNull(Me.txt_い) Then ' Me.Filter = "い LIKE '*" & Me!txt_い & "*'" End If If Not IsNull(Me.txt_う) Then ' Me.Filter = "う LIKE '*" & Me!txt_う & "*'" End If Me.FilterOn = True End Sub よろしくお願いします。

  • Access2007 フォームでのOR検索

    Access歴は2カ月程度です。 クエリから作成したフォームの中でのOR検索を行いたいのですが フィールド名・・・工具名,使用番号 検索に使用する非連結txtbox・・・工具名条件,使用条件 となっており、 Private Sub 検索_Click() If [工具名条件] <> "" Then 検索文字 = 検索文字 & " and 工具名 like '*" & [工具名条件] & "*'" If [使用条件] <> "" Then 検索文字 = 検索文字 & " and 使用番号 like '*" & [使用条件] & "*'" If 検索文字 = "" Then Me.FilterOn = False Else Me.Filter = Mid(検索文字, 6, 2000) Me.FilterOn = True DoCmd.Requery End If End Sub となっており、工具名と使用番号のAND検索は出来ているのですが、使用番号が1~6あり、 OR検索を使用して2つを検索条件にし、それぞれ該当している結果を表示させたいのですが。。。 工具名はカタカナや漢字のみです。 使用番号は「1,2,3」等と入力してあります。 クエリの抽出条件は無記入です。 どうぞ、よろしくお願いします。

  • アクセスのフォームで数値型の複数検索のについて

    アクセスのフォームで検索ボタンを設置して複数検索をしています。 下記の状態でうまくいってたのですが、依頼でまた一つ検索項目が追加になりました。 追加になった項目は数値型で”を抜いたりしたのですがうまく検索できません。 どうすればうまくいくか教えて下さい。 今のコードは以下の通りです。 Private Sub 検索ボタン_Click() Dim L1 As String If Nz(Me.品名検索, "") <> "" Then L1 = L1 & " AND 品名 Like '*" & Me.品名検索 & "*'" End If If Nz(Me.採取日検索, "") <> "" Then L1 = L1 & " AND 採取日 = #" & Me.採取日検索 & "#" If Nz(Me.数値検索, "") <> "" Then L1 = L1 & " AND 数値 = " & Me.数値検索 End If End If If L1 <> "" Then L1 = Mid(L1, 6) Me.Filter = L1 Me.FilterOn = True Else Me.Filter = L1 Me.FilterOn = False End If End Sub 数値の部分が数値型の新たな検索です。 宜しくお願い致します。

  • アクセスの複数検索で日付の絞込みの仕方

    アクセスでいま3種類の検索をかけて絞込みをしています。 テキスト型と数値型と日付で検索をかけてるのですが 日付の部分を一致だけではなくいつからいつまでという風にも絞り込みたいといわれたのですが いまいちやり方がわかりません。。。 クエリでしたら簡単なのですがすでにフォームを作成して運用していっていますので 下記にプラスして出来るようにご教授お願い致します。 今現在のコードです。 Private Sub 検索ボタン_Click() Dim L1 As String If Nz(Me.品名検索, "") <> "" Then L1 = L1 & " AND 品名 Like '*" & Me.品名検索 & "*'" End If If Nz(Me.採取日検索, "") <> "" Then L1 = L1 & " AND 採取日 = #" & Me.採取日検索 & "#" End If If Nz(Me.数値検索, "") <> "" Then L1 = L1 & " AND 数値 = " & Me.数値検索 End If If L1 <> "" Then L1 = Mid(L1, 6) Me.Filter = L1 Me.FilterOn = True Else Me.Filter = L1 Me.FilterOn = False End If End Sub 採取日を範囲指定で検索したいです。 範囲指定だけではなくその日だけ検索というのも可能ならばお願いします。 Between andでするというのだけは分かるのですが。。。

  • アクセス Between  Andの使い方 日付型

    フォームをテーブルに紐づけて コマンドボタンを押下したら、日付にフィルタをかけたいのですが、 0件で抽出されます。 フィールド1 2013/05/19 2013/05/20 2013/05/21 というテーブルがあり、 フォーム上のコマンドボタンのクリックイベントは Private Sub コマンド1_Click() Me.Form.Filter = "フィールド1 Between " & Date & " And " & Date + 1 Me.Form.FilterOn = True End Sub です。 2013/05/19 2013/05/20 が抽出されるべきだと思うのですが、なぜ何も抽出されないのでしょうか? エラーにもなりません。

  • Access 2003 でフォームフィルターがかかりません。

    Access 2003 でフォームフィルターがかかりません。 どなたか助けてください。 アクセス初心者です。 フォームの詳細欄にチェックボックス(フィールド名:伝票チェック)を配置しております。 チェックの入っていないものを表示させたいです。 フォームヘッダーのオプショングループ(フレーム67)に オプションボタン0-オプション値0と オプションボタン2-オプション値2 の2個のオプションボタンを配置してあります。 クリック時のイベントプロシージャに以下のコードを書きました。 Private Sub フレーム67_Click() If Me!フレーム67 = 0 Then Me.Filter = 伝票チェック = 0 Me.FilterOn = True Else Me.Filter = "" Me.FilterOn = True End If End Sub 実行時エラーは出ませんが、データが何も表示されません。 どうすればいいのでしょう??? どなたかお願いします。

  • ACCESS VBA にて複数項目のあいまい検索をしようとしています。

    ACCESS VBA にて複数項目のあいまい検索をしようとしています。 txt部所、txt内容、txt備考はそれぞれ検索窓です。 実行すると、 「オブジェクト変数またはWithブロック変数が設定されていません」 というメッセージがでます。 また、動作としては部所の検索のみでき、 内容、備考検索は上記のエラーメッセージが出てできない状態です。 アドバイスよろしくお願いいたします。 以下がコードになります。 Private Sub cmd01_Click() Me.FilterOn = False If txt部所 <> "" Then Me.Filter = "[部所氏名]like '*" & txt部所 & "*'" ElseIf txt内容 <> "" Then Me.Filter = "[内容]like '*" & txt内容 & "*'" ElseIf txt備考 <> "" Then Me.Filter = "[備考]like '*" & txt備考 & "*'" ElseIf Nz(txt部所) & Nz(txt内容) & Nz(txt備考) = "" Then MsgBox "検索条件を入力してください" End If Me.FilterOn = True End Sub

  • 両方の条件でフィルターをかけたいです

    こんにちは。 今、フォームに別々に条件を指定し、抽出するようにしております。 (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)という条件でフィルターをかけなければ ならない、と作成してから気づきました。 いろいろやってみたのですが、 どれもエラーになるばかりで。。。