データベース パソコン(ソフト)

【Access】Filterを使って複数条件を抽出する方法

マイクロソフトアクセス(以下Access)で帳票フォームから色々な条件で検索したり抽出したりするケースは多いかと思います。

Filter機能を使ってVBAから動かしてみましたが、

ココに注意

1つの項目での抽出はできるのに、複数になるとエラー

になってできなかったので備忘録にすることにしました。

 

1つの項目では抽出できる

アクセス Filter

はじめに、上の画像のように、「確定」という日本語でFilterを掛けて抽出する方法ですが、

Me.Filter = "confirmed = '" & confirmed_select & "'"
Me.FilterOn = True

上のようなVBAでちゃんと抽出することは確認できました。

そして、集荷日検索ですが、

Me.Filter = "[pu_date]=#" & Me.pu_date_mado & "#"
Me.FilterOn = True

上のようなVBAでちゃんと抽出できることも確認できました。

 

複数抽出にするとエラーが出た!

Me.Filter = "confirmed = '" & confirmed_select & "'" And "[pu_date]=#" & Me.pu_date_mado & "#"
Me.FilterOn = True

エラー13の型が違うよってエラーになり抽出することができません。

なぜなのでしょうか?

 

Filter複数抽出する方法

Dim strfilter1 As String
Dim strfilter2 As String

strfilter1 = "confirmed = '" & confirmed_select & "'"
strfilter2 = "[pu_date]=#" & Me.pu_date_mado & "#"
Me.Filter = strfilter1 & " And " & strfilter2
Me.FilterOn = True

よくわかりませんが変数をつかってFilterをかけたら期待した結果を抽出することができるようになりました。

今回は、文字と日付の複数条件でしたが、もっと項目が増えたとしても、

参考

strfilter1 & " And " & strfilter2 & "And " & strfilter3 & " And " & strfilter4 & " And " & strfilter5

のようにすれば簡単に複数抽出が可能になると思います。

 

非連結コンボボックス使用時の注意点

2つの非連結コンボボックス[confirmed_select]、[search_mado]があり、どちらかが選択されている場合と、どちらかが選択されていない場合の抽出が必要な場合があります。

コンボボックスの初期値に、Nullや””を設定してみたりしたりしましたが何だかうまく抽出がされません。

そこで下記のようにしたら、うまくいきました。

Private Sub search_mado_AfterUpdate()

 Dim strfilter1 As String
 Dim strfilter2 As String
 
If IsNull(confirmed_select) Or confirmed_select = "" Then

        Me.Filter = "[s_no]= " & search_mado
        Me.FilterOn = True
Else
        strfilter1 = "confirmed = '" & confirmed_select & "'"
        strfilter2 = "[s_no]= " & search_mado
        Me.Filter = strfilter1 & " And " & strfilter2
        Me.FilterOn = True

End If

End Sub

つまり、VBAコードにNullの時と、””(空)の時を設定して、抽出させました。

コンボボックスにて選択されている場合は、ANDで複数条件抽出になりました。

 

 

-データベース, パソコン(ソフト)
-, , , , , , ,

Translate »

© 2024 PCTips