VBAの三項演算子(IIf関数)

VBAには三項演算子はないが代替関数がある

VBAにも他の言語と同様に三項演算子があります。

正確には演算子ではなくIIf関数で実現しています。

ところが認知度がとても低いようです。

その理由の1つに書籍に書いてあることがほとんど無いのがあると思われます。

では、なぜ書籍には書かれていないのかと言うと、ひどいバグが実装されているためではないか思われます。

バグの詳細は後述しています。

他の言語であれば普通は三項演算子について本に書いてありますからね。

書いていないということはバグが原因と考えてよいと思います。

三項演算子(IIf関数)の書き方

以下のコードは通常のIf文と、同じ内容を三項演算子のIIf関数で書いたコードです。

通常のIf文のコード

出力結果

条件に一致
条件に不一致

三項演算子(IIf関数)のコード

出力結果

条件に一致
条件に不一致


三項演算子(IIf関数)のバグ

VBAの三項演算子(IIf関数)にはバグがあります。

MSDNではこの挙動について言及されていませんが、言語としてはバグです。

https://msdn.microsoft.com/ja-jp/library/27ydhh0d%28v=vs.90%29.aspx?f=255&MSPPError=-2147217396

「IIf 関数は、Visual C++ の三項の Conditional Operator: ? : と同じように利用できます。」と書いてありますが、嘘です。

以下はバグが発生するソースです。

出力結果
0
1

これ、何がバグなのかというと、IIf関数の第二引数と第三引数が関数の呼び出しなどの演算処理が行われる形式になっている場合、第一引数である条件文の結果に関わらず、第二引数と第三引数の両方が実行されてしまいます。

ひどいバグです。

一体何のための条件文なんでしょうか。

結論。三項演算子(IIf関数)は使わないようにしましょう

他の言語もそうですが、やはり三項演算子(IIf関数)はおすすめしません。

VBAのIIfに至っては認知度はかなり低いと思われるため他人がメンテすることがあれば大変ですし、直観的にわかりにくいため、誤読やコーディングミスにつながる恐れがあります。

そして、それ以前に言語としてバグってます。

関連記事

サブコンテンツ

このページの先頭へ