IIf VBA版三項演算子

javascriptだと結構見かける三項演算子ですが、VBAではあまり使われてない気がします。
結構便利なのにあまり使われてなく、なんだか勿体ない気がするのでちょっと紹介してみます。

javascriptでの三項演算子の書き方

var a = (b > c) ? 0: 1;

javascriptだと、上記の様に書きます。そもそも、三項演算子って?な方は、http://ja.wikibooks.org/wiki/JavaScript_If%E6%96%87%E3%81%AE%E5%BE%A9%E7%BF%92%E3%81%A8%E3%80%81%E4%B8%89%E9%A0%85%E6%BC%94%E7%AE%97%E5%AD%90とかを参考にして下さい。
あまり見慣れない書き方なので、知らない人は面食らう*1かもしれませんが、ショートコーディング*2には欠かせないコーディング方法です。

VBA三項演算子 = IIf関数

演算子ではないですが、VBAにも同じ様な事を出来る関数があって、それがIIf関数です。HELPには以下の様にあります。

IIf 関数

式の評価結果によって、2 つの引数のうち 1 つを返します。
構文
IIf(expr, truepart, falsepart)

IIf関数を使う場面

例えば、こんなケース。

Dim s As String
Dim i As Long, j As Long,

i = 3: j = 1
If i > j Then
	s = "大きい"
Else
	s = "等しいか小さい"
End If
MsgBox s

上記は二つの数字を比較して、最初の数の方が大きければ「大きい」と、同じまたは後の数の方が大きい場合は「等しいかか小さい」とメッセージボックスで表示されます。

IIf関数使って書いてみる

    Dim s As String
    Dim i As Long, j As Long
    
    i = 3: j = 1
    s = IIf(i > j, "大きい", "等しいか小さい")
    MsgBox s

こっちの方が行数が少なくて、スッキリしてていい感じです!

という訳で

If文を何でもかんでもIIfで…って訳にはいきませんが、判定式の結果に応じて変数に値を放り込む…といった単純な処理をさせる時は、IIf関数使って書くと、行数が少なくてスッキリするんでオススメです。

*1:自分はそうでした…(汗

*2:文字数の限られてるブックマークレットの時とかなんて特に!!