AccessのIIf関数についてお探しですね。
広告
Accessで条件によって値を変える「IIf関数」を使いこなそう
Accessでデータを扱っていると、「この条件のときはこの値、そうでないときは別の値」というように、状況に応じて結果を変えたい場面がよくあります。
そんなときに便利なのが「IIf関数」です。
ExcelのIF関数を使ったことがある人なら、考え方はほとんど同じなので、すぐに理解できると思います。
ただ、Accessならではの書き方のルールや、複数の条件を組み合わせるときの注意点があるので、しっかり押さえておきましょう。
この記事では、IIf関数の基本から、複数条件の使い方、Excelとの違い、そして複雑な条件分岐まで、初心者の方にも分かりやすく説明していきます。
IIf関数って何?基本の書き方とExcelとの違い
AccessのIIf関数(読み方は「アイ・イフ」)は、条件を満たしているかどうかをチェックして、その結果に応じて違う値を返してくれる関数です。
クエリの中で計算したり、フォームやレポートで表示内容を変えたりと、Accessのいろんな場面で使えます。
基本の書き方はこんな感じです。
“`
IIf(条件式, 条件を満たすときの値, 満たさないときの値)
“`
条件に当てはまるかどうかで、2つの結果を使い分けるシンプルな仕組みです。
「ExcelのIF関数と何が違うの?」と思った人も多いはず。
実は、考え方や書く順番はExcelのIF関数と全く同じなんです。
一番の違いは**関数の名前**。
AccessではIIf(アイを2つ)と書きます。
これは、Accessの裏で動いているVBAというプログラミング言語の決まりごとから来ています。
Excelの感覚で「IF」と書いてエラーになってしまうケースがとても多いので、まずはこの名前の違いを覚えておきましょう。
もう一つ、Accessならではの注意点が「Null(ヌル)」という概念です。
Excelでは空っぽのセルを単なる空白として扱うことが多いですが、Accessでは「値が存在しない状態(Null)」と「何も入っていない文字列」は別物として扱われます。
空白かどうかを判定するとき、単純に「=””」と書くとうまくいかないことがあるので、IsNull関数などを組み合わせる必要が出てくることもあります。
複数の条件を組み合わせる方法(AND・OR)
一つの条件だけでなく、「AとBの両方を満たす」「AかBのどちらかを満たす」といった複数の条件を組み合わせたいこともよくあります。
そんなときは、「And」や「Or」という言葉を使って条件式を作ります。
実際の仕事では、一つの基準だけで判断できることは少ないので、この書き方は覚えておくととても便利です。
例えば、「売上が10,000円以上」**かつ**「顧客ランクがA」という2つの条件を両方満たしたときだけ特別な手数料を適用したい場合は、こんな風に書きます。
“`
IIf([売上]>=10000 And [顧客ランク]="A", 適用する値, 適用しない値)
“`
Andを使うと、両方の条件が揃ったときだけ「条件を満たすときの値」が返されます。
一方、どちらか一方の条件を満たしていればOKという場合は、Orを使います。
“`
IIf([売上]>=10000 Or [顧客ランク]="A", ...)
“`
複数の条件を書くときのコツは、**分かりやすさを意識すること**です。
条件が長くなったら、カッコ()を使って区切ると、Accessも正しく理解しやすくなりますし、後で見直すときも読みやすくなります。
また、フィールド名は必ず大カッコ[]で囲むことも大切です。
これを忘れると、意図しないエラーが出たり、パラメーター入力画面が突然表示されたりすることがあります。
IIf関数を入れ子にして複雑な条件を作る
条件による分け方が2通りだけでなく、3通り以上必要な場合もあります。
そんなときは、IIf関数の中にさらにIIf関数を入れる「入れ子(ネスト)」という方法を使います。
これもExcelのIF関数でよく使うテクニックと同じで、「満たさないときの値」の部分に新しいIIf関数を丸ごと書き込むことで、段階的な判定ができるようになります。
例えば、テストの点数で「優」「良」「可」の3段階評価をつける場合を考えてみましょう。
まず「80点以上なら優」と判定して、それ以外の場合に「60点以上なら良、それ以外は可」と判定します。
“`
IIf([点数]>=80, "優", IIf([点数]>=60, "良", "可"))
“`
このように関数の中に別の関数を入れていくことで、理論上はいくらでも細かく条件を分けられます。
ただし、入れ子を深くしすぎるのは要注意です。
関数の中に次々と関数を入れていくと、式全体がとても長くなって、カッコの数が合わなくなるなどのミスが起きやすくなります。
さらに、どこかでおかしな結果が出たとき、どの部分が原因なのか見つけるのがとても大変になります。
実際の仕事では、入れ子は2〜3段階くらいまでにしておくのが無難です。
自分が作った式をテキストエディタなどに貼り付けて、全体を見渡しながら確認する習慣をつけるといいですよ。
入れ子が深すぎるときの別の方法とエラー対策
IIf関数の入れ子が深くなりすぎたら、「Switch関数」という別の関数を使うのがおすすめです。
Switch関数は、複数の条件とそれに対応する結果をセットで順番に並べて書ける関数です。
“`
Switch(条件1, 結果1, 条件2, 結果2, ...)
“`
こんな風に平らな構造で書けるので、IIf関数を何度も入れ子にするよりずっと読みやすくなります。
後で誰かが修正するときも分かりやすいので、分岐が4つ以上になるような複雑なケースでは、Switch関数の使用を検討してみてください。
また、IIf関数を使うときに初心者がつまずきやすいポイントも整理しておきます。
以下のことに気をつけるだけで、トラブルを大きく減らせます。
– **文字列はダブルクォーテーション(”)で囲む**
– **引数を区切るカンマ(,)を忘れない、全角カンマを使わない**
– **フィールド名は大カッコ([])で囲む**
Accessは、ダブルクォーテーションで囲まれていない文字列を、フィールド名か変数だと思い込んでしまいます。
そのため「パラメーターの入力」というダイアログが突然表示される原因になります。
数式や記号は必ず半角英数で入力するよう、入力モードには常に気をつけましょう。
もう一つ、ちょっと高度な注意点があります。
AccessのIIf関数は、「条件を満たすとき」と「満たさないとき」の両方の式を内部的に一度計算してから結果を返すという仕組みになっています。
そのため、「満たさないとき」の式に0で割る計算などが含まれていると、条件を満たしていてもエラーになってしまうことがあります。
こうしたAccessの仕組みを理解して、エラーになりそうな計算は事前に別のクエリで処理しておくなど、状況に応じた工夫をすることが、安定したデータベースを作るための大切なポイントになります。
広告
