色の知識で人生の可能性が広がる!みんなに役立つ色彩検定 >>

コンボボックスの値を抽出条件にしたクエリーを作成しています。
コンボボックスにて"ALL"を選択したときに、全レコードを表示したく、
以下の式を入れたのですが全表示がされません。

IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])

Like "*" の部分がいけないのでしょうか?
(偽の場合は選択した値のレコードが抽出されます)

どなたか教えてください、よろしくお願いいたします。

教えて!goo グレード

A 回答 (3件)

>IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値])


この条件は、抽出したいフィールドの「抽出条件」の所に入力しているんですよね?

ちょっと内容を変えまして・・・
(1)「抽出条件」ではなく、「フィールド」の行に入力してください。
 (つまり、抽出用の新しいフィールドを作成するということです。)
(2)式は
式1: IIf([Forms]![テーブル名]![コンボボックス名]="ALL",True,[テーブル名]![コンボボックス名]=[Forms]![テーブル名]![コンボボックス名])
にしてください。
(3)IIfを入力したフィールドの「抽出条件」に True と入力します。
 (Trueの囲い文字はいりません。)

どうでしょう?ちゃんと出ますよね・・・?
ただし、フィールドを作ったわけですから、
クエリのデータシートビューには必要のない、-1などが表示されたフィールドが表示されますよね。
これは、デザインビューに戻って、表示のチェックボックスをオフにすれば解決します。

IIFというのは、ExcelのIF関数とはちょっとイメージが違います。
以下解説↓

今回の条件式の部分には、[コンボ]="ALL"という評価式(←ポイント!)が入力されています。
Excelでは条件式というイメージが強いですが、
IIFは評価式という意味です。
つまり、この評価式自体がTrueとFalseを持つということです。
IIf([Forms]![テーブル名]![コンボボックス名]="ALL",・・・・)という式で、
条件をALLとしたら・・・
評価結果=True となります。
そして真の場合の処理にTrueを指定することで、IIFの戻り値がTrueになります。
条件にALL以外を入力すると・・・
評価結果=False となります。
そして偽の場合の処理の戻り値が、ALL以外の条件になります。
抽出条件にもTrueを入力したのは、無条件に全件が表示されるのを防ぐためです。

これは、表示をオンにして動作確認すると分かりやすいかも知れませんね。
または、とりあえず現象を直して、理解は後々・・・でもよいかも知れません。
健闘を祈ります!
    • good
    • 3
この回答へのお礼

ありがとうございます!できました!
条件式と評価式、とても勉強になりました。

お礼日時:2003/10/29 17:06

直接の答えではありませんが・・・。



動的に変更する条件すべてをIif関数でカバーしようとすると、SQLの可読性、保守性が著しく劣化します。
( 3分岐以上なら、Iifのネストが必須 )

という訳で、VBAで必要なSQLを動的に生成し、都度割り当てる、という方法はどうでしょうか?

これなら、3分岐以上でもSelect Case文で簡潔に記述できますし、プログラムの変更があってもソースコードの見通しは悪くなりません。
    • good
    • 1
この回答へのお礼

ありがとうございます、私の知識が足らず
SQLを動的に生成するという意味がわかりませんでした。
No.3の方の方法で解決できました。

お礼日時:2003/10/29 17:10

こんにちは。

maruru01です。

Like "*"

"Like '*'"

にしたらどうなりますか?

この回答への補足

早々にありがとうございます。
"Like '*'"でもだめでした。

補足日時:2003/10/29 11:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング