Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2016)
ANDとORを含めたレコード抽出方法がわかりません。
投稿日時: 20/04/22 09:49:29
投稿者: 縞縞

いつもお世話になっております。
レコード抽出を行いたいのですが、どのような処理をしてよいかわかりません。
お教え願えませんでしょうか。よろしくお願いいたします。
 
[レコード]
 ID、分類1、分類2、規格、製品
 1、 A、  AA、  F、  D
 2、 A、  AA、  D、  F
 3、 B、  AA、  D、  D
 4、 C、  CC、  M、  F
 
[やりたいこと]
 分類1はA、分類2はAAに含まれる、規格と製品にFを含むレコードを抽出したい。
 結果として、ID:1と2を抽出したい。
  (分類1、分類2、規格、製品全て、コンボボックスを作成しました)
 
[コード]
  Dim strFilter As String
  strFilter = "(製品 Like '" & "*" & Me.製品.Column(1) & "*')" & " OR" _
            & "(規格 Like '" & "*" & Me.規格.Column(1) & "*')" & " AND" _
            & "(分類2 Like '" & Me.分類2.Column(1) & "*')" & " AND " _
            & "(分類1 Like '" & Me.分類1.Column(1) & "*')"
 
  Me.Form.Filter = strFilter
  Me.Form.FilterOn = True
 
[問題]
 上記コードを実行すると、IDの1、2、4が表示されてしまいます。
 恐らく、orの記載方法が問題だと思います。
 ご教授の程よろしくお願いいたします。
 
 

回答
投稿日時: 20/04/22 11:15:38
投稿者: sk

引用:
分類1はA、分類2はAAに含まれる、規格と製品にFを含むレコードを抽出したい。
結果として、ID:1と2を抽出したい。

・[分類1]の値が "A" と前方一致する。
 
・[分類2]の値が "AA" と前方一致する。
 
・[規格]または[製品]の値が "F" と部分一致する。
 
以上の全ての条件を満たしているレコードを抽出したい、
ということでしょうか。
 
引用:
strFilter = "(製品 Like '" & "*" & Me.製品.Column(1) & "*')" & " OR" _
          & "(規格 Like '" & "*" & Me.規格.Column(1) & "*')" & " AND" _
          & "(分類2 Like '" & Me.分類2.Column(1) & "*')" & " AND " _
          & "(分類1 Like '" & Me.分類1.Column(1) & "*')"

strFilter = "((製品 Like '" & "*" & Me.製品.Column(1) & "*')" & " OR " _
          & "(規格 Like '" & "*" & Me.規格.Column(1) & "*')" & ") AND " _
          & "(分類2 Like '" & Me.分類2.Column(1) & "*')" & " AND " _
          & "(分類1 Like '" & Me.分類1.Column(1) & "*')"
 
引用:
恐らく、orの記載方法が問題だと思います。

OR 条件全体を () で括っていないためです。
 
引用:
分類1、分類2、規格、製品全て、コンボボックスを作成しました

ただ、この例でワイルドカードを使う必要があるのか否かについては、
正直疑問ではありますが。

投稿日時: 20/04/22 12:03:10
投稿者: 縞縞

sk様
 
早速のご連絡誠にありがとうございます。
アドバイスどおりに実行したところ、やりたい通りに実行できました。
誠にありがとうございます。
 
・OR 条件全体を () を囲う件、大変勉強になりました。
・ワイルドカードの件、精査します。
深く御礼申し上げます。