IF声明与OR标准和ISERROR

我有一个不工作的公式。

=IF(OR(AC358="",ISERROR(AC358), AC358=0),VLOOKUP(M358,FCal,3,TRUE),VLOOKUP(AC358,FCal,3,TRUE) 

AC列中有一个vlookup,它将返回一个实数值0或者一个错误#N / A。

当AC(vlookup)返回#N / A错误时,IF语句将以当前格式失败。

不过,IF声明也适用于我

  1. 硬编码一个实际值或一个零到AC,或

  2. 如果我只用一个标准ISERROR(AC358)replaceOR标准,

所以我知道ISERROR是独立工作的,但它不在OR语句中工作。

使用ISERROR或ISNA检查错误必须与其他计算分开进行; 您不能在OR中嵌套更常规的错误检查。 对包含#N / A的单元格进行检查的OR将返回#N / A,而不是TRUE或FALSE。 =IF(ACD358=0, TRUE, FALSE) ACD358包含#N / A错误时=IF(ACD358=0, TRUE, FALSE)不返回FALSE; 它返回#N / A。

 =IF(ISNA(AC358), VLOOKUP(M358, FCal, 3), IF(OR(AC358="", AC358=0), VLOOKUP(M358, FCal, 3), VLOOKUP(AC358, FCal, 3))) 

当错误检查返回TRUE时,处理立即传递到第一个M358 VLOOKUP函数 ; 另一个IF和OR不计算。

考虑到一个空白,零或#N / A可能会从FCal返回#N / A,也许这个更短的版本与IFERROR会更好。

 =IFERROR(VLOOKUP(AC358, FCal, 3), VLOOKUP(M358, FCal, 3)) 

TRUE是VLOOKUP的range_lookup参数的默认值。 除了清楚之外,没有必要。