我在 H 列中写了一个简单的公式,用于检查 A 列中的项目编号是否在名为 SharePoint 的工作表上。如果不在,单元格将显示“添加到 SP”。
=IF(COUNTIF(SharePoint!N:N,A2)=0,"添加到 SP","")
但我真正想要的是,只有当 SharePoint 工作表没有 Item# 并且列 D 或 F 中没有以下 OR 语句中的短语之一时,单元格才会显示此信息。我在上面的公式中添加了 AND 和 OR 语句的组合来实现这一点。此公式位于 I 列。
=IF(AND(COUNTIF(SharePoint!N:N,A2)=0,OR(D2="已转移",D2="需要验证",D2="无需 PPAP",D2="未获批准即关闭",F2="供应商延迟")),"添加到 SP","")
这里有几个测试用例。。这两个项目号都不在 SharePoint 工作表中(列 H 中的简单公式可以正确诊断),并且它们在 OR 语句中有一个短语。因此,我应该将列添加到 SP,但公式只返回 #N/A 错误。
如果我没记错的话,我认为没有任何语法错误。我觉得公式的逻辑是合理的,那么我做错了什么?我在组合 AND 和 OR 语句时犯了某种错误吗?
答案1
通过在 F2 中放置,成功重现了错误=NA()
。原因如下:公式正在测试值“Supplier Late”和单元格 F2 之间的相等性。单元格 F2 具有特殊值#N/A
(不是文本值)。
尝试这个:
=IF(NA()="OK","Good","Bad")
#N/A
=IF(OR(TRUE,NA()="OK"),"Good","Bad")
伊斯兰国#N/A
AND
使用逻辑函数(或运算符)和公式(或 VBA)时,不会出现“懒惰”(短路求值)的情况OR
。所有项目都首先求值,最后应用逻辑。
为了解决这个问题,请在所有可能出现这种情况的相等性测试中使用包装器:
IFNA(test,)
不需要提供第二个参数IFNA
(返回零并测试为 False)。
=IF(AND(COUNTIF(SharePoint!N:N,A2)=0,OR(D2="Transferred",D2="Needs Validation",D2="No PPAP Required",D2="Closed W/O Approval",IFNA(F2="Supplier Late",))),"Add to SP","")