在Excel中,是否有一個早期的退出AND功能(也稱爲短路評估)?在Excel中,是否有一個提前退出AND/OR功能(短路評估)?
例如:
=AND(FALSE, #N/A)
返回#N/A。如果函數是「提前退出」,只要找到第一個FALSE,它就會返回FALSE,因爲沒有附加值可能會使函數返回true。
excel中是否存在這樣的函數?
在Excel中,是否有一個早期的退出AND功能(也稱爲短路評估)?在Excel中,是否有一個提前退出AND/OR功能(短路評估)?
例如:
=AND(FALSE, #N/A)
返回#N/A。如果函數是「提前退出」,只要找到第一個FALSE,它就會返回FALSE,因爲沒有附加值可能會使函數返回true。
excel中是否存在這樣的函數?
你所說的「early opt out」通常被稱爲「short-circuit evaluation」,通常是C/C++/C#/ Java系列語言的一個特性(但主要是而不是 Visual BASIC)。
對於Excel公式,一些邏輯函數實踐短路評估,但有些則不。 AND
沒有,因爲你找到了。 OR
也沒有 - 如果OR
表達式中的第一個參數爲真,Excel仍然會嘗試評估後續參數。
解決方法是使用嵌套IF
s;對IF
的評估從外部到內部逐步進行,必要時進行分支,並在沒有進一步嵌套公式進行評估時停止。這會產生正確的短路行爲。所以,你可以寫爲
=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")
現代Visual Basic(即VB.NET)使用備用運算符'AndAlso'和'OrElse'來提供簡短-circuiting。但是,Excel VBA不是基於VB.NET的... – jimbobmcgee
你正在尋找本地Excel中不存在的功能。
然而,你可以模仿它,例如,使用IFERROR
:
=AND(FALSE,IFERROR(A1,FALSE))
(工作項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
將此函數放置在Visual Basic編輯器的模塊中。現在您可以在Excel中使用=EarlyAnd(False,A1)
。
您可能可以根據需要調整Choose(),但我們需要更多的細節。你可以編輯你的文章,並告訴我們你的具體問題? – PowerUser
此外,我建議爲此頁添加書籤:http://www.techonthenet.com/excel/formulas/index_ws.php – PowerUser