• ベストアンサー

ACCESSのクエリー抽出条件にIIFを使用して

コンボボックスの値を抽出条件にしたクエリーを作成しています。 コンボボックスにて"ALL"を選択したときに、全レコードを表示したく、 以下の式を入れたのですが全表示がされません。 IIf([Forms]![テーブル名]![コンボ値]="ALL",Like "*",[Forms]![テーブル名]![コンボ値]) Like "*" の部分がいけないのでしょうか? (偽の場合は選択した値のレコードが抽出されます) どなたか教えてください、よろしくお願いいたします。

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

  • ベストアンサー
noname#64217
noname#64217
回答No.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を入力したのは、無条件に全件が表示されるのを防ぐためです。 これは、表示をオンにして動作確認すると分かりやすいかも知れませんね。 または、とりあえず現象を直して、理解は後々・・・でもよいかも知れません。 健闘を祈ります!

pinopino77
質問者

お礼

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

その他の回答 (2)

noname#5584
noname#5584
回答No.2

直接の答えではありませんが・・・。 動的に変更する条件すべてをIif関数でカバーしようとすると、SQLの可読性、保守性が著しく劣化します。 ( 3分岐以上なら、Iifのネストが必須 ) という訳で、VBAで必要なSQLを動的に生成し、都度割り当てる、という方法はどうでしょうか? これなら、3分岐以上でもSelect Case文で簡潔に記述できますし、プログラムの変更があってもソースコードの見通しは悪くなりません。

pinopino77
質問者

お礼

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

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 Like "*" ↓ "Like '*'" にしたらどうなりますか?

pinopino77
質問者

補足

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

関連するQ&A

専門家に質問してみよう