在Excel中,是否有一个提前退出的AND / ORfunction(短路评估)?

在Excel中,是否有一个提前退出ANDfunction(也称为短路评估)?

例如:

=AND(FALSE, #N/A) 

返回#N / A。 如果函数是“提早退出”,那么一旦find第一个FALSE,它就会返回FALSE,因为没有额外的值可以使函数返回true。

excel中是否有这样的函数?

你所说的“尽早退出”通常被称为“短路评估”,并且通常是C / C ++ / C#/ Java家族中的语言特征(但是,特别是, 不是 Visual BASIC)。

对于Excel公式,一些逻辑函数实践短路评估,但有些则没有。 并没有,因为你已经find了。 OR ,如果ORexpression式中的第一个参数为真,Excel仍然会尝试评估后续的参数。

解决scheme是使用嵌套的IF s; IFs的评估从外到内逐步进行,必要时进行分支,当没有进一步的嵌套公式被评估时停止。 这产生了正确的短路行为。 所以你可以写上面的代码

 =IF(FALSE, IF(ISNA(<address of cell to test for the #N/A state>), TRUE), FALSE) 

另一个可能更清楚的例子是:

 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") 

您正在查找的function在本机Excel中不存在。

你可以模仿它,例如使用IFERROR

 =AND(FALSE,IFERROR(A1,FALSE)) 

(Work in 2007 and beyond。在2003,你需要使用=IF(ISERROR(A1),FALSE,A1)而不是IFERROR(A1,FALSE) 。)

或者,你可以build立一个用户定义function:

 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 

将此函数放在Visual Basic编辑器中的模块中。 现在,您可以在Excel中使用=EarlyAnd(False,A1)