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関数使って書くと、行数が少なくてスッキリするんでオススメです。