Joe*_*Joe 8 excel if-statement lazy-evaluation
Excel的if函数有三个参数,一个条件,一个if-true值和一个if-false值.Excel是否计算出所有三个参数的值,或者它是否只计算出条件的值和相应的结果?
澄清:我不知道什么是结果的if会,我想知道它是否计算的所有参数计算函数的结果前的值.
这相当于询问if函数是否使用惰性或严格评估.例如,以下伪代码:
x = 5;
print x>2 ? "Bigger" : "Smaller" + 1/0
Run Code Online (Sandbox Code Playgroud)
会在完全严格评估的语言中抛出除零异常,因为它会评估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
Run Code Online (Sandbox Code Playgroud)
我假设你真的是指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
Run Code Online (Sandbox Code Playgroud)
在一个单元格中: =IF(TRUE,truepart(),falsepart())
每次计算IF()单元格时只获得一个msgbox.
作为进一步验证,这将为您提供两个msgbox - 每个一个:
Sub Tester()
Debug.Print IIf(True, TruePart(), FalsePart())
End Sub
Run Code Online (Sandbox Code Playgroud)
小智 5
它不是。
Excel 2013 仅评估必要的代码。
我有一个非常复杂且耗时的单元格公式来复制几十万行。计算需要几个小时。但幸运的是,根据其他一些标准很容易确定结果何时为零。
因此,当其他标准建议它必须为零时,使用 If 语句来避免计算,并且仅在必要时才执行计算极大地加快了过程,将处理时间缩短到之前的 10% 左右。
如果 Excel 计算两个表达式,则 If 语句只会增加复杂性和时间。