• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:NULL値を含む場合のフィルタ)

NULL値を含む場合のフィルタ

このQ&Aのポイント
  • NULL値を含む場合、VBAコードでワイルドカードを使用してもフィールド2がNULLのレコードを抽出することができない。
  • テーブルのフィールド2のデータを空白に置き換えることで、NULL値を抽出することができるが、全てのNULL値に空白を入れる作業は大変なため、避けたい。
  • フィールド1にAを入力し、フィールド2には何も入力せずに検索すると、1件もヒットしないが、フィールド1にBを入力するとBのレコードが抽出される。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

テキスト_2 に入力がなかった場合、 > "フィールド2 like '*" & Me.テキスト_2.Value & "*'" は、 "フィールド2 like '**'" となり、Null 以外全部・・・という意味になります。 Null のものも対象としたい場合には、条件を記述しない事です。 例えば  Dim sWhere As String  Const sAndOr = " AND "  sWhere = ""  If (Not IsNull(Me.テキスト_1)) Then    sWhere = sWhere & sAndOr & "フィールド1 like '*" & Me.テキスト_1 & "*'"  End If  If (Not IsNull(Me.テキスト_2)) Then    sWhere = sWhere & sAndOr & "フィールド2 like '*" & Me.テキスト_2 & "*'"  End If  If (Len(sWhere) > 0) Then    Me.Filter = Mid(sWhere, Len(sAndOr) + 1)    Me.FilterOn = True  Else    Me.FilterOn = False    Me.Filter = ""  End If ※ 条件を記述する場合、文字列先頭に必ず sAndOr を付加します。 条件ありの場合は、先頭の sAndOr を除いた分を条件設定します。

dngewlehzym
質問者

お礼

>フィールド2 like '**'" となり、Null 以外全部・・・ ワイルドカードでnull値は抽出されないとのこと、覚えます。 頂いたコードの仕組みがよくわかりませんが、 (特にMe.Filter = Mid(sWhere, Len(sAndOr) + 1)の部分) 使わせていただきます。 ありがとうございました。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

F1      F2 A    B       B          C としたら、クリック時イベントに Me.Form.Filter = _ IIf(IsNull(Me!TX1), "(F1 like '*" & Me!TX1.Value & "*' or F1 is Null)", "(F1 like '*" & Me.TX1.Value & "*')") _ & " and " _ & IIf(IsNull(Me!TX2), "(F2 like '*" & Me!TX2.Value & "*' or F2 is Null)", "(F2 like '*" & Me.TX2.Value & "*')") Me.Form.FilterOn = True MsgBox Me.Filter ということかな? テキスト_1 → TX1、フィールド1 →F1 のようにしています。

dngewlehzym
質問者

お礼

Filterプロパティの中にIIF関数を入れることもできるのですか。 知りませんでした。 条件として、"*' or F1 is Null としないと、null値は抽出されないようですね。

関連するQ&A