本ページには広告が含まれています。

VBA IIf 関数 式の評価に基づいた値(式)を返します

VBA IIf 関数 式の評価に基づいた値(式)を返します

Excel VBAの「IIf 関数」について解説します。

スポンサーリンク

IIf 関数とは

Excel VBA の IIf 関数は、式の評価(True/False)に基づいて2つの部分に対応する値または式を返します。

IIf 関数は、Ifステートメントで書き直すことが出来ます。If文に比べて簡潔に書けるのが特徴ですが、内部的には少しクセがあります。簡潔に書けるからといって安易にIf文をIIf関数に書き換えると、予期せぬエラーにつながることがあるので注意が必要です。

IIf 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。

IIf 関数(Visual Basic for Applications リファレンス)

スポンサーリンク

構文(引数と戻り値)

Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。

構文

IIf(expr, truepart, falsepart)

引数

指定項目説明
expr【必須】評価する式を指定します
truepart【必須】exprTrue のとき返す値または式を指定します
falsepart【必須】exprFalse のとき返す値または式を指定します

exprValue はペアで構成されます。ペアリングが正しくない場合は実行時エラーが発生します。

戻り値

expr の評価が True の場合は truepartFalse の場合には falsepart を戻り値として返します。

IIf 関数の注意点

IIf 関数は、条件に関係なくすべての引数が評価されるため、エラーが発生する可能性があります。

VBAの関数は、関数の内部処理が始まる前に引数に記載した全ての式や値が事前評価されます。その後に実際の内部処理が行われ結果を返します。

処理プロセス(式の一部として関数を使用した場合の)

  1. 式の中でVBA関数が呼び出されると、すべての引数が評価されます
  2. 関数内部処理が実行され、結果が戻り値として返されます
  3. 呼び出し元の式に関数の戻り値が埋め込まれます

問題となる例

上の構文では x0 の場合、評価式 x <> 0True でも 10 / x が評価され「0で除算エラー」が発生するため IIf 関数もエラーになります。

回避方法としては、IIf 関数ではステートメントのような逐次制御(順番に評価すること)ができないので通常の If…Then…Else ステートメントを使う方が安全です。

解説(使用例)

IIf 関数の使い方について、サンプルコードを使って解説します。

IIf 関数使用サンプル

Switch 関数の使用例を紹介します。

基本的な使用例

次の例は、条件式が True になると、その直後の値が返される簡単な例です。

'■IIf関数サンプル1(基本的な使用例)
Sub IIf_Sample01()
  Dim score As Integer
  Dim res As String
  score = InputBox("点数を入力してください!")
  ' If文を使って処理する場合
  If score >= 80 Then
    MsgBox "合格"
  Else
    MsgBox "不合格"
  End If
  
  '×誤ったIIf関数への置き換え例
  res = IIf(score >= 80, MsgBox("合格"), MsgBox("不合格"))
  MsgBox res
  
  '○正しいIIfへの置き換え例
  res = IIf(score >= 80, "合格", "不合格")
  MsgBox res

End Sub

はじめに InputBox で調べたい点数(値)を入力します。

InputBoxで点数を入力

6~11行目:最初のパートは If文を使って入力値「75」を評価しています。75 は 80以上ではないので Else の「不合格」が下の画像のとおり MsgBoxに表示されました。

IIf_Sample01 結果を表示したMsgBoxの画像

13~15行目:If文をそのまま IIf 関数に置き換えたコードで実行しています。これはダメな例として使っています。
実行時に次のように MsgBox が3つ表示されました。

truepart評価時に表示されたMsgBox
truepart 評価で表示
falsepart評価時に表示されたMsgBox
falsepart 評価で表示
truepaet MsgBox("合格") の評価結果
IIf 関数の戻り値

これで IIf 関数が引数全てを評価していることが確認できました。
truepart と falsepart に Msgbox を含んだ式を設定しているため、評価時に Msgbox が表示されていたということです。戻り値も「1」のように求めているものと相違しています。

17~19行目:If文から IIf 関数に正しく置き換えた例です。
実行後次のようにIIf 関数の戻り値だけが MsgBox に表示されました。

セル操作に IIf 関数を活用した例

次は IIf 関数を実践的活用例として、セルの値によってセルを色分けします。

'■IIf関数サンプル2(セルの配色処理例)
Sub IIf_Sample02()
  Dim rng As Range
  Dim cell As Range
  Dim score As Integer

  'セル範囲を変数rngに格納
  Set rng = Range("B2:B6")
  'rng(セル範囲)の各セルをループする
  For Each cell In rng
    'セルの値を取得
    score = cell.Value
    'セルの値によりセルを色分けする
    cell.Interior.Color = IIf(score >= 60, vbGreen, vbRed)
  Next cell

End Sub

セル範囲をループ処理して各セルの値を評価して色分けしています。

IIf_Sample02実行結果のセル範囲画像

実行結果は上の画像のとおりです。値が60以上のセルが緑色、60未満が赤色に表示されました。

おわりに

VBA の IIf 関数は、式の評価(True/False)に基づいて対応する値または式を返します。条件分岐のショートカットとして非常に便利ですが、すべての引数が事前評価される点に注意を払う必要があります。

IIf 関数は、すべての引数が即時に評価されるため、ステートメントのような逐次制御ができません。したがって、True/False で切り替える場合でもエラーが発生するリスクがある場合には、通常の If…Else ステートメントなどを使った方が良いでしょう。

※ IIf の I は Immediate(即時、すぐ)の略です。「即時 If」ということですね。

以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;

VBAの関数一覧はこちらからご参照ください。

スポンサーリンク
スポンサーリンク

VBAサンプルファイルダウンロードページのご案内

このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。

ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!