7/06/2019

Access。Excelユーザーが戸惑う、IF+AND関数は、Accessだとどうなるの?

Access。Excelユーザーが戸惑う、IF+AND関数は、Accessだとどうなるの?

<Access>

次のテーブルがあります。

金額フィールドが3001~4000までだったら、○を別のフィールドに表示したい場合どうしたらいいのでしょうか?

Excelだったら、IF+AND関数を使う方法があります。
=IF(AND(a4>=3001,a4<=4000),”○”,””)
というような数式を作れば、簡単に算出することができますよね。

ところが、AccessだとExcelのような数式を作るわけにはいきません。

どういうことかというと、
ExcelのIF関数は、Accessでは、IIf関数を使えば同じように使えるのですが、ExcelのAnd関数は、Accessでは、ありません。

クエリなど抽出条件の時に、ANDを使うのでは?と思う人も多いかと思いますが、関数としては、無い。抽出にはあるけど…

Excelユーザーが、Accessで同じことやろうとすると、うまくいかないケースの一つが、Excelではお馴染みのIF+AND関数なんですね。

しかしながら、この抽出でANDを使うというのがわかっていれば、簡単なので、確認していくことにしましょう。

クエリでないとできませんので、クエリをデザインビューで作っていきます。
まずは、Excelと同じように作ってみることにします。

判定というフィールドに結果を算出させていきます。

判定:iif(and([金額]>=3000,[金額]<=4000),"○","")
と演算フィールドを設定しましたが、エラーが表示されました。

「指定した式の構文が正しくありません。」
つまり、この演算フィールドではダメということなんですね。

演算フィールドでAndを使う時には、純粋に、「条件1でかつ条件2」と作ってあげればAccessでは、Andを演算フィールドで使うことができます。

つまり、次のように演算フィールドを作っていきます。
判定: IIf([金額]>=3000 And [金額]<=4000,"○","")

まずは、実行して確認してみましょう。

エラーも表示されず、希望通りに3001~4000の間ならば、判定に”○”が表示されていますよね。

要するに、使い方として、条件と条件の間にAndで連結してあげればいいわけですね。

条件は別のフィールドでも大丈夫です。
例えば、金額が3001~4000で、購入日が2018年11月以降ならば、”○”とした演算フィールドを作ってみましょう。

判定: IIf([金額]>=3000 And [金額]<=4000 And [購入日]>=#2018/11/01#,"○","")
Andがもう一つ登場した形ですね。

なお、日付は、「#」で囲む必要がありますので、Excelユーザーは注意しましょう。

では、実行して確認してみましょう。

条件に合致したものだけに”○”が表示されているのが確認できます。

今回のExcelではお馴染みのIF+And関数は、Accessでは変わってしまいます。

ExcelとAccessでは微妙に異なるものがありますので、知っておいて損はなさそうですね。