アクセスです。
テーブルに
フィールド1 フィールド2
A
B B
C C
と入ってるとします。
フィールド2についてはNULL値のレコードもあれば、
値が入ってる場合もあります。
このテーブルをフォームにひもづけていて、(帳票フォームにしています)
フォームヘッダーにテキストボックス2つとコマンドボタンがあり
Private Sub コマンド_Click()
Me.Form.Filter = _
"フィールド1 like '*" & Me.テキスト_1.Value & "*'" & " and " _
& "フィールド2 like '*" & Me.テキスト_2.Value & "*'"
Me.Form.FilterOn = True
End Sub
としたときに、レコードのフィールド2に文字が入ってる場合は、抽出できるのですが、
フィールド2がNULLの場合は、1件もヒットしません。
テキスト_1にはAを入れて
テキスト_2には何も入れないで検索してみると、1件もヒットしませんが、
テキスト_1にBを入れて検索すると、Bのレコードが抽出されます。
もちろん
テキスト_1もテキスト_2もBをいれても、Bのレコードが抽出されます。
VBAコードで
& "フィールド2 like '*" & Me.テキスト_2.Value & "*'"
としてるので、NULL値でも抽出されると思ったのですがなぜ何も抽出されないのでしょうか?
ワイルドカードでnull値も検索されないのでしょうか?
テーブルのフィールド2のデータをNull値ではなく、””にしたら、問題なく抽出されましたが
データのNull値はNull値のままにして、空白などの文字には置き換えたくないです。
(というか、すべてのNULL値に空白を入れる作業が大変なのでやりたくないです。
実際のフィールド数は50個くらいあります)
よろしくお願いします。
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 を除いた分を条件設定します。
>フィールド2 like '**'" となり、Null 以外全部・・・
ワイルドカードでnull値は抽出されないとのこと、覚えます。
頂いたコードの仕組みがよくわかりませんが、
(特にMe.Filter = Mid(sWhere, Len(sAndOr) + 1)の部分)
使わせていただきます。
ありがとうございました。
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 のようにしています。
Filterプロパティの中にIIF関数を入れることもできるのですか。
知りませんでした。
条件として、"*' or F1 is Null
としないと、null値は抽出されないようですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Access(アクセス) Accessテキストボックス内に2つのフィールドの値を比較して大きい方の値を表示させる方法 1 2022/09/09 10:50
- Access(アクセス) accessの日付フィールドから前年度だけを取り出したい 3 2022/04/13 23:13
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
アクセスのフィルタ nullについて。
その他(データベース)
-
アクセスのfilter、複数条件の記述方法を教えてください。
Access(アクセス)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
-
4
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
5
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
6
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
7
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
8
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
9
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
10
検索フォームで空白を抽出したい
Access(アクセス)
-
11
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
12
(ACCESS)条件に応じて、テキストボックスを表示・非表示設定
その他(データベース)
-
13
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
14
Accessでレコードを別テーブルへコピーするには
Access(アクセス)
-
15
Accessクエリ 複数フィールドを対象に空白の場合は全件表示したい
Access(アクセス)
-
16
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
17
ACCESSでテーブルにあるチェックボックスを一括でYesにする方法を教えてください
Access(アクセス)
-
18
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
19
accessで該当するレコードがない場合
その他(プログラミング・Web制作)
-
20
データベースの最適化をマクロでしたい
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでフォームへのフィール...
-
Accessのクエリで、Left関数を...
-
access で「指定したフィール...
-
NULL値を含む場合のフィルタ
-
別のテーブルのフィールドを抽...
-
アクセスで前年対比を出す方法...
-
FileMakerでアットマーク入り文...
-
LotusNotesで全角の空白を半角...
-
Access2000 2番目に大きい数値...
-
値("001")と数値(1)が混在...
-
PDFファイルへの書き込み
-
ファイルメーカーでシリアル番...
-
Access 抽出条件を自動で入力し...
-
[Access]クエリの抽出条件について
-
ACCESS クエリで重複データを最...
-
テーブルに主キーを作らないデ...
-
accessのレポートであとから他...
-
ACCESSのフォームからデータの...
-
選択したチェックボックスのみ...
-
access・カウント結果がゼロで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのクエリで、Left関数を...
-
Accessでフォームへのフィール...
-
Accessでグループ化した結果フ...
-
NULL値を含む場合のフィルタ
-
Access2000 2番目に大きい数値...
-
アクセスで前年対比を出す方法...
-
access で「指定したフィール...
-
【access】テキストから日付へ...
-
値("001")と数値(1)が混在...
-
ファイルメーカーで住所内の市...
-
FileMakerでアットマーク入り文...
-
Access2003でフィールドのデー...
-
アクセスのフィールドデータを...
-
別のテーブルのフィールドを抽...
-
[Access]クエリの抽出条件について
-
ファイルメーカー あいうえお...
-
OpenOfficeのフィールドの種類
-
ファイルメーカーで名前のよみ...
-
アクセスクエリで以前あった演...
-
[Microsoft Access]クエリ作成...
おすすめ情報