他言語でも実装されている三項演算子ですがVBAにも実装されています。ただし1点だけ注意しなければならない点がありますので紹介します。 特に他言語経験者は要注意です。
サンプルプログラム
注意点が見えやすいようにIf-ElseのパタンとIIfのパタンを書きました。If-Elseのパタンについては出力内容を見ても、まぁそうなるよねという内容です。しかしIIfのパタンについてはどうでしょうか?なぜげfuga関数もコールされています。これがVBAの三項演算子IIfで中止しなければならない点です。
IIfの判定結果については正しいものが返却されますが(今回の場合は”偶数”という文字列)、評価については両方の関数について行われます。hoge、fuga両方の関数がコールされるということです。
巨大なプログラムになると気づきにくいバグとなるので、可能ならばIIf関数は利用しないほうが良いと思います。
Function isEven(i) '偶数判定関数
If i Mod 2 = 0 Then
isEven = True
Else
isEven = False
End If
End Function
Function hoge()
Debug.Print "hogeがCallされました"
hoge = "偶数"
End Function
Function fuga()
Debug.Print "fugaがCallされました"
fuga = "奇数"
End Function
Sub sample()
Debug.Print "IF Else での判定"
' IF Else での判定
If isEven(2) Then
Debug.Print hoge
Else
Debug.Print fuga
End If
Debug.Print "IFF での判定"
' IFF での判定
Debug.Print IIf(isEven(2), hoge, fuga)
End Sub
出力内容
IF Else での判定
hogeがCallされました
偶数
IFF での判定
hogeがCallされました
fugaがCallされました
偶数