質問: access iif関数 複数条件の設定について 選択クエリにおいて、あるフィールド「 x」 のレコード数値が 0<[x]<=50 であれば a 50<[x]<=100 であれば b 100<[x]<=150 であれば c と表記させるフィールド「y」を追加したいと考えています。 この場合、yのフィールド設定で指定する数式についてご教授願います。 一応、 iif(0<[x]<=50,"a","") or iif(50<[x]<=100,"b","") or iif(100<[x]<=150,"c","") としましたが、実行すると、yの列がすべて「-1」と表記されてしまいます。 何卒よろしくお願いいたします。
回答: はじめまして、こんにちは iif(0<[x]<=50,"a","") or iif(50<[x]<=100,"b","") or iif(100<[x]<=150,"c","") この式で、何故「-1」になるかの説明をすると各判定を全て説明しなくてはならなくなるので 省略します。 iifでやるとしたら iif((0<[x]) and ([x]<=50),"a",iif((50<[x]) and ([x]<=100),"b",iif((100<[x]) and ([x]<=150),"c","")))となります しかし、クエリーのフィールドの部分に 長い式を入れるのは、見にくくなりますし編集もしにくいです。 そこで、モジュールを作成し、ユーザー定義関数を作成します。 ユーザー定義関数は自分で任意の結果を返す関数を作成することが出来ます。 たとえばモジュール名はuserfunctionmoduleとし その中にcompと言う関数を定義します comp関数の中身は以下のように定義します。 function comp(x as long) as string ’ユーザー定義関数宣言 x は数値型で宣言 compは文字型で宣言 comp = "" ’わかりやすく初期化 if (0 < x) and (x <= 50) then comp = "a" ’aを返す end if if (50 < x) and (x <= 100) then comp = "b" ’bを返す end if if (100 < x) and (x <= 150) then comp = "c" ’cを返す end if ’どの条件にも当てはまらない場合は、""を返します。 end function クエリーでは「y:comp(x)」で、呼び出して使用することが出来ます。 参考までに