- 締切済み
ACCESSのあいまいな条件のクエリ
フォームで金額を入力します。 この入力された金額を使ってクエリの条件を作りたいと考えています。 <条件> ・金額が未入力の場合は、全て抽出。 ・金額が入力されている場合は、その金額以上を抽出 (例:1000と入力された場合は、>=1000) 下記のような条件式を入れたら、金額を入力しているにも関わらず、 何も入力されてきませんでした。 IIf(IsNull([Forms]![フォームA]![txt金額]),Like "*",>=Val([Forms]![フォームA]![txt金額]))
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- DexMachina
- ベストアンサー率73% (1287/1744)
確かに、クエリのデザインビューでは「Like ~」と、Like演算子が先頭になった 式が指定できますが、これは特殊例です。 通常は「フィールド Like 値」とか「フィールド Like 式」のように、比較するもの 同士の間にしか入れられないので、今回ご提示のような「IIF(~, Like "*",~)」 といった使い方はできません。 なお、今回のような場合は、『抽出条件』欄でIIF関数で場合分けするよりも、 『フィールド』欄に式を指定し(=演算フィールドといいます)、その『抽出条件』欄に True/Falseを指定してやった方が、わかりやすいかもしれません。 添付画像は、テーブル名を「MT1_価格一覧」、検索フィールドを「売価」とした 場合の例です。 (『フィールド』欄に式を指定すると、先頭に「式1:」といった文字が追加されますが、 その列の『表示』チェックをオフにした上でクエリを保存すれば、その文字は除去 されます) なお、「txt金額」が空白(=演算フィールドの結果がTrue)の場合の「売価」の 抽出条件に「Like "*"」を指定した場合、「売価」が未入力(=Null)のレコードは 対象外になります。 もしも「全件を表示」というものの中に、そういったレコードがある場合は、ここの 「Like "*"」という式は削除してしまってください。 (これにより、「売価」が未入力のものも除外されなくなります) 【現状(=添付画像)】 Like "*" True >=Forms!~ False 【修正後】 True >=Forms!~ False
- piroin654
- ベストアンサー率75% (692/917)
Likeが何のためにあるのかわかりませんが、 金額を指定しなければ全表示、指定すれば >=金額のクエリを作成ということであれば、 テーブルをtblT、フィールドをID、金額 とすると、 SELECT tblT.ID, tblT.金額 FROM tblT WHERE (((tblT.金額)>=[Forms]![フォームA]![txt金額] Or (tblT.金額)=IIf(IsNull([Forms]![フォームA]![txt金額 ]),[金額],([tblT].[金額])>=[Forms]![フォームA]![txt金額]))); これでどうですか。 上記のSQL文を貼り付けるときは[txt金額]の額と]の 間が離れてコピーされるので修正してください。 では。