Microsoft Access 掲示板

テキストボックス(カンマ区切りの複数検索)で、未入力なら全件検索したい。

7 コメント
views
4 フォロー

Access初心者です。

下記のようなテーブルがあった場合に、
テキストボックス(カンマ区切りで複数可)から指定された社員IDのレコードを表示させようと思っています。
ただし、テキストボックスに何も入力されなかった場合は「検索の指定無し」として、
レコードを全件表示させたいです。

[テーブル1]
(社員ID)  (社員名)
000001    社長
000002    副社長
000003    部長
000004    課長
000005    主任
000006    平社員1
000007    平社員2
000008    アルバイト

簡単に実現可能な方法があるとは思うのですが、
クエリのフィールドに指定する方法で実現させたいです。
自分なりに調べてみて、フィールドには以下を設定しました。

Eval(BuildCriteria("'" & [テーブル1]![社員ID] & "'",10,"*" & Replace([ID検索],",","* Or *") & "*"))
※抽出条件は「-1」です。

この条件で、テキストボックス[ID検索]に「000002,000004,000008」のように入力すると、
思い通り3件のレコード{副社長/課長/アルバイト}を表示することができました。
ただ、何も入力しなかった場合は画像のようなエラーダイアログが表示されてしまいます。
画像1

そこで、テキストボックスがNullかどうか判定を追加してみようと思い、
以下のように変更してみましたが同じエラーダイアログが表示されてしまいました。

IIf(IsNull([ID検索]),True,IIf(Eval(BuildCriteria("'" & [テーブル1]![社員ID] & "'",10,"*" & Replace([ID検索],",","* Or *") & "*")),True,False))
※抽出条件は「<>False」です。

Accessの経験値が少なく、ネットでも対処方法が見つけられず行き詰まってしまいました。
この条件のどこをどのように直せば未入力時の全件表示が可能でしょうか?
よろしくお願いいたします。

ひすゎし
作成: 2021/05/11 (火) 19:17:01
通報 ...
1
ゲッキョク駐車場 2021/05/12 (水) 09:50:35 cb55f@f6500

IIf(IsNull([ID検索]),[テーブル1]![社員名],Eval(BuildCriteria("'" & [テーブル1]![社員ID] & "'",10,"" & Replace([ID検索],","," Or ") & "")))

でどうでしょうか。
条件式ちゃんと見てないのであってるか微妙ですが。

2
hiroton 2021/05/12 (水) 10:23:09 5bc31@f966d

Replace 関数

Replace([ID検索],",","* Or *")の部分で[ID検索]が未入力(Null)ならエラーが発生します。

複雑な計算式でエラーが出た場合は、式を分解して内容を確かめる等、原因の究明をしましょう
例えば、抽出用のフィールドを作らず、単にReplace([ID検索],",","* Or *")だけのフィールドを作成します

これだけのクエリでも質問のようなテストを実行すれば同じエラーが表示されるはずです

3
ひすゎし 2021/05/12 (水) 10:30:07 33979@0cc7b

ゲッキョク駐車場様、ありがとうございます!
テキストボックスに何も入力されなかった(NULLの)場合は対象をそのまま表示させればいいということですね。
思いつきもせず目からウロコです!
ただ、、、ご教授いただいた方法でも同じエラーダイアログが表示されてしまいました。

どこか根本的な見落としでもあるのでしょうか・・・。

4
ゲッキョク駐車場 2021/05/12 (水) 10:47:07 cb55f@f6500

hirotonさんのが圧倒的に強いので、出しゃばりたくはないのですが、
Null出ちゃう時にとりあえず使うイメージのある「Nz」を使ってみては。
Nzの使い方とかは調べるとたくさん出てきます。

5
ひすゎし 2021/05/12 (水) 12:11:50 33979@0cc7b

>hiroton様
ある程度で式を分解して確認する、肝に銘じておきます。

>ゲッキョク駐車場様
Nz関数を使って、以下のようにすることで無事解決することができました。
Eval(BuildCriteria("'" & [テーブル1]![社員ID] & "'",10,"*" & Replace(Nz([ID検索]),",","* Or *") & "*"))

どういった関数があるのか、あったとしてそれをどう見つけ当てるかが大事ですね。
色々と経験値を溜めて行ければと思います。
hiroton様、ゲッキョク駐車場様、貴重な情報ありがとうございました!

6

解決済みですが、下記のような方法もあります。ご参考までに。

フィールド式1: "," & Nz([ID検索],[社員ID]) & ","
表示
抽出条件Like "*," & [社員ID] & ",*"
7
ひすゎし 2021/05/12 (水) 17:43:34 33979@0cc7b

hatena様、新たな情報ありがとうございます。
実現方法も様々あるようで、場面によって適した方法が使えるように励みたいと思います。
改めましてありがとうございました。