Excel’s if function takes three arguments, a condition, an if-true value, and an if-false value. Does Excel work out the value of all three arguments, or does it only work out the value of the condition and the corresponding result?
Clarification: I’m not wondering what the result of the if will be, I’m wondering whether or not it calculates the value of all arguments before calculating the result of the function.
This is equivalent to asking whether or not the if function uses lazy or strict evaluation. For example, the following pseudocode:
x = 5;
print x>2 ? "Bigger" : "Smaller" + 1/0
would throw a divide-by-zero exception in a language with fully strict evaluation, as it would evaluate the 1/0, even though the result wouldn’t be required for the ?: operator.
In a lazy-evaluation language, the ?: operator would evaluate x>2 before even deciding which expression to evaluate.
The problem is that in Excel, 1/0 produces a legitimate value (which happens to be #DIV/0!) that can exist in expressions. Therefore, simply calling =if(true,1,1/0) doesn’t show whether Excel is evaluating the 1/0 or not.
Very east to test
I’m assuming you really mean iif() – in VBA this does not “short-circuit”, so you should use
If..Then..Else..End Ifin cases where that could be a problem.Ok – testing what you really asked:
In a cell:
=IF(TRUE,truepart(),falsepart())Only get one msgbox per calculation of the IF() cell.
As further validation, this gives you two msgbox – one for each: