こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2015-04-05 14:52:09

QNo.8949729

すぐに回答ほしいです

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

いちおう、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

投稿日時 - 2015-04-05 22:49:23

お礼

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

投稿日時 - 2015-04-06 10:48:34

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.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にするだけですが。

このように、なります。コードは簡単なのですが、
まだ、どういう結果がほしいのか確認ができて
いないような気がするのですが、どうでしょうか。

一度、それぞれについて、コードを表示して
みますので、確かめてみますか?

投稿日時 - 2015-04-05 21:34:33

ANo.3

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

投稿日時 - 2015-04-05 16:02:03

補足

何やら自分でも構文が変だと思い書き直してみました。
内容としては、ステータスリストのステータスのみの検索と
申請リストの申請内容のみの検索
そしていままで行ってきた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

ご助言宜しくお願いいたします。

投稿日時 - 2015-04-05 17:43:47

ANo.2

書き忘れましたが、

この条件のときのときにフィルタをかける。

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

投稿日時 - 2015-04-05 15:53:41

ANo.1

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

投稿日時 - 2015-04-05 15:33:36

あなたにオススメの質問