
選択クエリにおいて、あるフィールド「 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」と表記されてしまいます。
何卒よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
a)IIF関数で対応する場合:
IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。
式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))
b)別の組込関数を使用する場合:
IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
使用できる、似た機能の関数に、Switch関数というものもあります。
これであれば、入れ子にする必要がなくなります。
(詳しくは、Accessのヘルプを参照下さい)
式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")
なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)
但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
場合は、省略ができない、と)
【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。
この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。
なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html
ご回答ありがとうございました。
0<[X]<=50
とはしないんですね。
またSwitch関数の活用方法についても勉強になりました。
大変ありがとうございました。
No.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)」で、呼び出して使用することが出来ます。
参考までに
ご回答ありがとうございました。
また、モジュールの件も参考になります。
確かに、長くなるのは不便なので活用させていただきます。
大変助かりました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- PowerPoint(パワーポイント) Accessについて 2 2022/06/15 13:25
- Excel(エクセル) Excel 条件付き書式について 1 2022/12/14 20:38
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Access(アクセス) Accessクエリで年月フィールドを年のみで抽出する方法について 2 2022/08/29 18:10
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
このQ&Aを見た人はこんなQ&Aも見ています
-
【ACCESS/必須条件とOR条件を組み合わせる】
その他(Microsoft Office)
-
iif関数で3つ以上条件を抽出したい場合
IT・エンジニアリング
-
OR関数
その他(Microsoft Office)
-
-
4
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
5
ACCESSのクエリー抽出条件にIIFを使用して
Access(アクセス)
-
6
アクセスの初心者の質問です(空白の場合に他のフィールドを表示させたい。)
Access(アクセス)
-
7
IIF構文の書き方 AccessのクエリでIIF文を上手く書けず、お力を貸して頂ければと思います。
Access(アクセス)
-
8
IIF関数の使い方
Visual Basic(VBA)
-
9
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
10
Accessで値がnullの場合は計算せずにnullをかえす方法
Access(アクセス)
-
11
クエリの一つのフィールドのIIF関数の限界は14個ですか?
Access(アクセス)
-
12
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
13
ACCESS クエリで重複データを最新の1件だけ表示
Access(アクセス)
-
14
Access レポートでiif関数で文字列検索
その他(Microsoft Office)
-
15
ACCESS クエリの抽出条件に他のテーブルの値を参照する方法
Access(アクセス)
-
16
Accessクエリーで両方のテーブルの全てのデータを表示することは可能ですか?
Access(アクセス)
-
17
クロス集計クエリの結果をテーブルにしたい
Access(アクセス)
-
18
アクセスVBAのMe!と[ ]
Access(アクセス)
-
19
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
20
クエリで出来た表にチェックボックスを追加する
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
皆さん定義を教えてください 「...
-
べき乗
-
無限から無限を引いたら何にな...
-
電磁誘導に法則 V=ーdφ/dt...
-
1未満と1以下の違い
-
「互いに素」の定義…「1と2は互...
-
日本語 ことば ひとまわり ふた...
-
eの0乗は1ってどういう原理です...
-
複雑な家庭とは
-
ヘシアンが0の場合どうやって極...
-
最大の自然数mが存在すると仮定...
-
最大元と極大元の定義の違いが...
-
ACCESS VBAでインポート定義の場所
-
p⇒q=(¬p)∨qについて
-
√6=√(-2)(-3)=√(-...
-
\\mathrmと\\rmの違いについて...
-
なぜ、直角三角形ではないのにs...
-
0に限りなく近い数は存在するの?
-
エクセルで「”」インチの表示形...
-
「logx^2=2logx」が間違って...
おすすめ情報