Excel's if
函数采用三个参数:一个条件、一个 if-true 值和一个 if-false 值。 Excel 是否计算出所有三个参数的值,还是仅计算条件的值和相应的结果?
澄清:我不知道是什么result of the if
将会是,我想知道它是否在计算函数结果之前计算所有参数的值。
这相当于询问是否if
函数使用惰性或严格评估。例如,以下伪代码:
x = 5;
print x>2 ? "Bigger" : "Smaller" + 1/0
会在具有完全严格评估的语言中抛出被零除的异常,因为它将评估1/0
,即使结果不需要?:
操作员。
在惰性求值语言中,?:
操作员会评估x>2
在决定评估哪个表达式之前。
问题是在 Excel 中,1/0
产生一个合法的值(恰好是#DIV/0!
) 可以存在于表达式中。因此,只需调用=if(true,1,1/0)
不显示 Excel 是否正在评估1/0
or not.
非常容易测试
? iif(true, 1, 1/0) 'run-time error: division by zero
我假设你真正的意思是 iif() - 在 VBA 中这不会“短路”,所以你应该使用If..Then..Else..End If
如果这可能是一个问题。
好的 - 测试你真正问的问题:
'In a VBA module
Function TruePart()
MsgBox "True part"
TruePart = "True"
End Function
Function FalsePart()
MsgBox "False part"
FalsePart = "False"
End Function
在一个单元格中:=IF(TRUE,truepart(),falsepart())
IF() 单元格的每次计算仅获取一个消息框。
作为进一步验证,这将为您提供两个 msgbox - 每一个:
Sub Tester()
Debug.Print IIf(True, TruePart(), FalsePart())
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)