IIf関数とIF関数

VBAのIIf関数は、3項演算子では無く関数なので、引数にゼロ除算が入ったりすると、エラーが発生します。たとえば、イミディエイトウィンドウで?IIF(True, 1, 1 / 0)とすると、第3引数も評価されて、ゼロ除算の実行時エラー11が出ます。

いっぽう、Excelのワークシート関数であるIF関数は、VBAのIIf関数と同機能ですが、=IF(FALSE, 1/0, 1/1)のようにしても、1が返ります。そこで数式の検証をすると、IF(FALSE,#N/A,1)となっています。関数全体の結果がエラーになるのでは無く、中で第2引数が該当無しエラーと評価され、結果として、意図通りに1が返ります。

でも、たとえば=SUM(1, 1/0)のようにすると、検証でちゃんと?SUM(1,#DIV/0!)となって、戻り値も0除算のエラーとなります(値のエラーでは無く)。

この挙動を踏まえて、VBAでワークシート関数のほうを使って試せないか、と思いましたが、そもそもWorkSheetFunctionオブジェクトにはIfメソッドは無いのでした。ちゃんちゃん。

ちなみに、私はIIf関数を使うべきで無い的な意見には賛同しません。挙動を知って上手く使えば良いだけの話だからです。たとえば、数値の大小の評価をして、それに応じた文字列を変数に入れる、などシンプルな処理の時に使います。