- ベストアンサー
Accessでのiif関数について
はじめまして。 Microsoft Accessの関数についての質問です。 例えばクエリの「商品名」の値AをBに置き換えたい場合、 =iif([商品名]=A,B)とします。 また、商品番号1000~9999まであるとして、1000~1999を抽出したい場合は、Like "1*" もしくは、Between 1000 And 1999 とします。 この時に 商品番号1000~1999を一律1000と置き換えたい場合、クエリでやるとしたらどのようにすれば良いのでしょうか。 イメージ的には =iif([商品番号]="1*",1000)なのですが、「"1*"」の部分をどうやってもうまくいきません。 どなたか詳しい方いらっしゃいましたらお教え頂けないでしょうか。 お忙しいところ申し訳ございませんが、宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
何をしたいのかがいまいちわからないので試される際は複製のMDBでお試しください。 アクセスには更新クエリがありますのでそれを利用されるのが良いかと思います。 (ただし商品番号が重複なしのインデックスである場合は同じ値に変更することはできません。) 1000から1999までの数値を1000さらに2000から2999を2000、、、、と置き換えるためには =int([商品番号]/100)*100 100で割ったものの整数値を100倍にするという方法がありますのでこれを更新クエリのレコードの更新に入れると良いのかもしれません。 ただ、1000から1999のみが対象の場合はこれらの値を選択するクエリを作成し、それを更新クエリに変更し更新する値に1000と入れればよいだけです。
その他の回答 (2)
- nda23
- ベストアンサー率54% (777/1415)
商品番号は数値項目ですよね? もしも、文字列であるならIif関数ではなくLike演算子を使います。 WHERE 商品番号 Like "1*" あるいはVal関数で数値化します。 WHERE Val(商品番号) BETWEEN 1000 And 1999
お礼
はじめまして。 ご連絡遅れて申し訳ありません。 アドバイス頂いた方法で試してみます。 ありがとうございました。
- nda23
- ベストアンサー率54% (777/1415)
Iif(商品番号>=1000 And 商品番号<=1999, 1000, ~) または Iif(Int(商品番号/1000)=1, 1000, ~) 本筋は第1案です。第2案は理屈が分かっていないで使うと、仕様変更が あった時に修正できないでしょう。
お礼
はじめまして。 早速ご解答頂きありがとうございます。 ご教授頂いた方法(両方)で試してみたのですがうまくいきませんでした。 ただ、ヒントになる部分もありましたので、改良して試してみます。 ありがとうございました。
お礼
はじめまして。 早速ご解答頂きありがとうこざいます。 Int関数を利用する方法は「なるほど」と思いました。 今試していますがうまくいきません。 Int関数は使えそうなのでもう少しがんばってみます。 本当にありがとうございました。