【Access関数】IIf関数の使い方|構文・具体例

アイキャッチ 入門講習

IIf関数は、Accessで条件分岐を式レベルで書ける便利な関数です。
「もし条件が真ならA、偽ならB」といった処理を、クエリ・フォーム・レポート・VBAなど、さまざまな場所で使用することができます。

本記事では、基本的な構文や具体的な使い方について解説します。

IIf関数とは

IIf関数は、Accessにおける条件分岐用の関数です。ExcelにおけるIf関数の位置づけといえます。


名前は Immediate If(即時If) の略で、その名のとおり「もし条件が真ならこの値、偽ならあの値」という処理を1行の式で書けるのが特徴です。

VBEの「イミディエイトウインドウ」の「即時」と同じ意味ですね!

Accessで条件分岐といえばIfステートメントがありますが、IIf関数ならクエリやフォーム上にに直接条件分岐を埋め込めるため、式がシンプルにまとまりやすいというメリットがあります。

たとえば「得点が80点以上なら“合格”、それ以外は“不合格”」という判定を、Ifステートメントで書くと複数行必要になりますが、IIf関数なら1行で済みます。こうしたちょっとした条件分岐に最適な関数といえます。

構文

IIfの基本構文

IIf( 条件式, 真の場合の値, 偽の場合の値 )

各引数の内容は次のとおりです。

引数必須/省略内容
条件式必須True(真)またはFalse(偽)に評価される式
真の場合の値必須条件式がTrueのとき返す値
偽の場合の値必須条件式がFalseのとき返す値

具体例

金額に応じて表示を変える

IIf([取引金額]>=50000, "高額", "通常")

取引金額フィールド50,000円以上なら高額取引、それ以外なら通常取引と表示します。

日付や期限で判定

IIf([納期]<Date(), "期限切れ", "期限内")

納期フィールドが今日(Data関数を使用)より前なら期限切れ、それ以外は期限内と表示します。

Null値を置き換える

IIf(IsNull([備考]), "未入力", [備考])

備考フィールドがNull値であった場合に、未入力と表示します。空欄対策として見受けられるパターンです。

複数条件を扱う

IIf([点数]>=80, "優", IIf([点数]>=60,"良","不可"))

点数フィールドが80点以上の場合はを表示。80点未満60点以上であれば。60点未満であれば不可を表示します。

このようにIIf関数を複数用いることを「入れ子」または「ネスト」といい、判断分岐はどんどん増やすことができます。しかし可読性や速度低下にもつながるため、分岐が多くなる場合はSwitch関数(後述)などが推奨されます。

使用例

クエリの演算フィールドで使用

クエリの演算フィールドでIIf関数を使用することができます。

【具体例】

例として、次のテーブルを元にしたIIf関数使用例を解説します。

納期フィールドに対して、現在の状態を表す納期ステータスフィールドを追加するため、クエリデザイングリッドの演算フィールドに次の構文を設定します。

納期ステータス: IIf([納期]<Date(),"遅延","正常")

実行結果は以下のとおりです。

フォームのコントロールソースで使用

前述では納期ステータスをクエリで作成しましたが、同じことをフォームに配置したテキストボックスのコントロールソースにIIf関数を指定することで行うことができます。

まずは連記式のフォームを作成し、テーブルの各フィールドを配置します。

その後、非連結のテキストボックスを配置し、コントロールソースに以下IIf関数を設定します。

=IIf([納期]<Date(),"遅延","正常")

実行結果は以下のとおりです。

注意点

IIf関数は条件式の結果に関わらず、True 側と False 側の両方の式を先に評価してしまいます。そのため、エラーを起こす式や重い処理がFalse側にあり、条件がFalseなら実行されない…と思って書くと、実はエラーやパフォーマンス低下を招くことがあります。

例:ゼロ除算エラーが発生するケース

Dim x As Integer
x = 0
Debug.Print IIf(x <> 0, 100 / x, 0)

上記コードは「x0のときはFalse側の0を返すから大丈夫」のように見えますが、実際にはTrue側の100/x も同時に評価されるため、ゼロ除算エラーが発生します。

このようなケースを避けるには、Ifステートメントなどを使用する方が安全です。

Dim x As Integer
x = 0
If x <> 0 Then
    Debug.Print 100 / x
Else
    Debug.Print 0
End If

IfステートメントはTrue側・False側のどちらか片方しか評価されません。

類似関数との比較

Access/VBA では、IIf 関数以外にも条件分岐を扱うための仕組みがいくつか用意されています。代表的なものを簡単に紹介します。(※各関数・ステートメントの詳しい使い方は別記事で解説予定です。)

If ステートメント

VBA コード内で最も基本的な条件分岐構文です。If…Then…Else の形で、条件に応じた処理を柔軟に記述できます。複数行の処理や複雑な条件分岐が必要な場合には IIf関数よりも適しています。

Select Case ステートメント

VBA コード内で複数の条件を整理して書ける構文です。長いIf…ElseIfや複雑なIIf関数の代わりに使うと、スマートで分かりやすい記述となります。

Switch関数

複数の条件を順に評価し、最初に真となった条件に対応する値を返します。複雑な条件分岐をIIf関数で何重にもネストするより、Switch関数を使う方が可読性が高くなります。

Switch関数の使い方等は、以下の記事で詳しく解説しています。

Choose関数

数値で指定されたインデックスに対応する値を返す関数です。条件分岐というより「番号選択」に近い使い方ですが、簡易的な分岐に利用されることがあります。

まとめ

本日の記事の要点をまとめます。

  • IIf関数は「条件式に基づいて2つの値を返す」Accessの定番関数
  • クエリ・フォーム・レポート・VBAなど幅広く使える
  • 引数評価や型変換に注意が必要
  • 複雑な条件はSwitch関数やIfステートメントと併用して可読性を確保しましょう

タイトルとURLをコピーしました