Bea*_*use 9 excel excel-formula
在Excel中,是否有早期选择退出AND功能(也称为短路评估)?
例如:
=AND(FALSE, #N/A)
Run Code Online (Sandbox Code Playgroud)
返回#N/A. 如果函数是"早期选择退出",则一旦找到第一个FALSE就会返回FALSE,因为没有其他值可以使函数返回true.
excel中是否存在这样的功能?
dod*_*ler 15
您所谓的"早期选择退出"通常称为"短路评估",通常是C/C++/C#/ Java系列中的语言功能(但值得注意的是,不是 Visual BASIC).
对于Excel公式,一些逻辑函数执行短路评估,但有些则没有. AND
没有,正如你所发现的那样.也没有 - 如果OR
表达式中的第一个参数OR
为true,Excel仍将尝试评估后续参数.
解决方案是使用嵌套的IF
s; IF
s的评估从外到内逐步进行,必要时进行分支,并在没有进一步的嵌套公式进行评估时停止.这产生了正确的短路行为.因此,您可以将上面的代码编写为
=IF(FALSE, IF(ISNA(<address of cell to test for the #N/A state>), TRUE), FALSE)
Run Code Online (Sandbox Code Playgroud)
另一个可能更清楚的例子:
Cell A1 contains the value 1 and cell A2 contains the formula "=1/0",
causing a #DIV/0 error.
Put this formula in A3:
=IF(A1 = 0, IF(A2 = 5, "Never get here"), "Short-circuit OK: A1 <> 0")
Run Code Online (Sandbox Code Playgroud)
本机 Excel 中不存在您要查找的函数。
但是,您可以模仿它,例如使用IFERROR
:
=AND(FALSE,IFERROR(A1,FALSE))
Run Code Online (Sandbox Code Playgroud)
(在 2007 年及以后工作。在 2003 年,您需要使用=IF(ISERROR(A1),FALSE,A1)
而不是IFERROR(A1,FALSE)
。)
或者,您可以构建一个用户定义函数:
Public Function EarlyAnd(var1 As Variant, ParamArray vars() As Variant) As Boolean
On Error GoTo Finalize
Dim blnTemp As Boolean
Dim varNext As Variant
If Not CBool(var1) Then GoTo Finalize
For Each varNext In vars
If Not CBool(varNext) Then GoTo Finalize
Next
blnTemp = True
Finalize:
EarlyAnd = blnTemp
End Function
Run Code Online (Sandbox Code Playgroud)
将此函数放置在 Visual Basic 编辑器的模块中。=EarlyAnd(False,A1)
现在您可以在 Excel 中使用。