Excel 的 if
函数采用三个参数:一个条件、一个 if-true 值和一个 if-false 值。 Excel 是否计算出所有三个参数的值,还是仅计算出条件的值和相应的结果?
说明:我不是想知道 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
。
最佳答案
非常容易测试
? 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() 单元格时仅获取一个消息框。
作为进一步验证,这将为您提供两个消息框 - 每个消息框一个:
Sub Tester()
Debug.Print IIf(True, TruePart(), FalsePart())
End Sub
关于excel - Excel 是否计算提供给 IF 函数的两个结果参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10440104/