IIfの謎
一昨日書いたネタにコメントで以下のような指摘をうけました(ありがとうございます)。
Perlの場合は実行時エラーではなくてその前のエラーですね(コンパイルエラーのようなもの)。
my $foo = 0; としておいて 3 / 0 の所を 3 / $foo にするとチェックにかからないので実行できます
なるほど、確かに実行できるように。
そこで、ふと気になったのが、EXCEL VBAのIIfも、同じような制約にかかっているのではないか、という事。
というわけで、以下のようなコードを書いて試してみた。
Public Sub test() Dim a As Integer a = IIf(True, outputA1(), outputA2()) End Sub Public Function outputA1() As Integer Range("A1").Select ActiveCell.FormulaR1C1 = "abc" outputA1 = 0 End Function Public Function outputA2() As Integer Range("A2").Select ActiveCell.FormulaR1C1 = "def" outputA2 = 0 End Function
IIfの条件がTrueの場合は、outputA1()、Falseの場合はoutputA2()を呼び出すことで、それぞれA1セル、A2セルに値を書き込む、というもの。
で、実行してみたところ、やはり、両方が評価されているようで、A1とA2のセルに値が書き込まれている。危険な関数だなぁ。要注意。
ちなみに、同じような処理をperlで書いてみたら、ちゃんと片方しか動きませんでした。指摘されなかったら、ずっと気付かないところだった。ありがとうございます。