无法将 IFERROR 与具有多个条件的 IF 语句结合使用

无法将 IFERROR 与具有多个条件的 IF 语句结合使用

我有一个嵌套的 IF 公式。某些 IF 语句的返回值由索引匹配给出。如果该项目在另一张表上不存在,则索引匹配返回 #N/A,但如果出现错误,我希望单元格显示“需要调查”而不是 #N/A,因此我已放入 IFERROR 语句来执行此操作。这很好用。查看我加粗的第一个 IF 语句,看看我在说什么。

我遇到的问题与最后一个 IF 语句有关(也以粗体显示)。这个语句与其他所有语句都不同,因为它有多个条件(其中一个条件由索引匹配给出),并且我指定了 Else 返回值(即,如果条件为真,则返回值,别的返回其他值)。我想实现与上述相同的目的(即,如果出现与上述相同的 #N/A 错误,我希望单元格显示“需要调查”而不是 #N/A)。我已经在能想到的所有地方都输入了 IFERROR 语句,但都不起作用。我应该在哪里输入 IFERROR?或者我应该使用 IFERROR 以外的其他东西吗?

=IF(D2="Approved","Approved",IF((AND(D2="Supplier Submittal",E2="Interim Approval")),"Interim Approved",IF(D2="Define","Initial Review",IF(D2="Due Date Approval","Initial Review",IF(D2="Initial Review","Initial Review",IF(D2="No Status","Drawing Not Released",IF(D2="Polaris Review","Polaris Review",IF(D2="Staging","Waiting on Child Components",IF(D2="Supplier Acceptance","Initial Review",**IF(D2="Closed W/O Approval",IFERROR(INDEX(SharePoint!X:X,MATCH('Exceptions List'!A2,SharePoint!N:N,0)),"Needs Investigation")**, IF(D2="Needs Validation",IFERROR(INDEX(SharePoint!X:X,MATCH('Exceptions List'!A2,SharePoint!N:N,0)),"Needs Investigation"),IF(D2="No PPAP Required",IFERROR(INDEX(SharePoint!X:X,MATCH('Exceptions List'!A2,SharePoint!N:N,0)),"Needs Investigation"), IF(D2="Transferred",IFERROR(INDEX(SharePoint!X:X,MATCH('Exceptions List'!A2,SharePoint!N:N,0)),"Needs Investigation"),IF((AND(D2="Supplier Submittal",C2<TODAY())),"Supplier Late",IF((AND(D2="Supplier Submittal",C2>TODAY(),C2<$J$1)),"On Track for PV",**IF((AND(D2="Supplier Submittal",C2>$J$1, INDEX(SharePoint!X:X,MATCH('Exceptions List'!A2,SharePoint!N:N,0))="")),"Due after PV",INDEX(SharePoint!X:X,MATCH('Exceptions List'!A2,SharePoint!N:N,0)))**)))))))))))))))

这是相同的公式,可能更容易看。

如果有帮助的话,下面是我加粗的第一个 IF 语句的示例(有效的语句) 来自电子表格。

下面是我使用的 IF 语句示例的快照 有麻烦。

答案1

使用该SWITCH函数可能有助于调试问题,使公式更易读且更易于维护。括号已减少 15 个集合,包括围绕(AND(...))函数。
因为IF“供应商提交”需要默认操作的情况(最后一个嵌套的IF条件FALSE),此默认值也复制到SWITCH函数的默认子句中。这些默认值INDEX(MATCH())现在用 括起来IFERROR。此处的缺失IFERROR可能会导致 #N/A 错误。

测试中可能存在未捕获的 #N/A 错误,INDEX(MATCH())=""以确定“PV 结束后截止”""可以通过返回除此以外的内容来本地修复条件AND( C2>$J$1,IFERROR(INDEX(MATCH()),"NO MATCH")=""), "Due after PV",. 有这个IFERROR回报“需要调查”"" FALSE也会与导致这个最终条件IF的比较FALSEIFERROR(INDEX(MATCH()),...返回“需要调查”
实施的解决方案是将整个最终嵌套IF(“PV 结束后截止”)并从该条件中IFERROR删除冗余。IFERRORIFFALSE

有时 Excel 喜欢将多行公式粘贴到多个单元格中。在这种情况下,请将公式直接粘贴到公式栏中。

可以通过按以下方式格式化公式(条形图)并添加换行符Alt-Enter

=SWITCH(D2, "Approved", "Approved", "Define", "Initial Review", "Due Date Approval", "Initial Review", "Initial Review", "Initial Review", "No Status", "Drawing Not Released", "Polaris Review", "Polaris Review", "Staging", "Waiting on Child Components", "Supplier Acceptance", "Initial Review", "Closed W/O Approval", IFERROR( INDEX( SharePoint!X:X, MATCH( 'Exceptions List'!A2, SharePoint!N:N, 0)), "Needs Investigation"), "Needs Validation", IFERROR( INDEX( SharePoint!X:X, MATCH( 'Exceptions List'!A2, SharePoint!N:N, 0)), "Needs Investigation"), "No PPAP Required", IFERROR( INDEX( SharePoint!X:X, MATCH( 'Exceptions List'!A2, SharePoint!N:N, 0)), "Needs Investigation"), "Transferred", IFERROR( INDEX( SharePoint!X:X, MATCH( 'Exceptions List'!A2, SharePoint!N:N, 0)), "Needs Investigation"), "Supplier Submittal", IF( E2 = "Interim Approval", "Interim Approved", IF( C2 < TODAY(), "Supplier Late", IF( AND( C2 > TODAY(), C2 < $J$1 ), "On Track for PV", IFERROR( IF( AND( C2> $J$1, INDEX( SharePoint!X:X, MATCH( 'Exceptions List'!A2, SharePoint!N:N, 0)) = ""), "Due after PV", INDEX( SharePoint!X:X, MATCH( 'Exceptions List'!A2, SharePoint!N:N, 0))), "Needs Investigation") ))), IFERROR( INDEX( SharePoint!X:X, MATCH( 'Exceptions List'!A2, SharePoint!N:N, 0)), "Needs Investigation"))

答案2

实际上,您的公式可以正常工作,但有一个例外……它里面有四对星号,必须删除。完成后,它工作得很好。(** 是需要删除的四个字符对。)

此外,它可以通过多种方式收紧。您有两个地方,D2 中的不同值导致相同的结果。它们可以放在一起,OR()公式将更容易理解,并且可能更容易让 Excel 计算。看起来最后一个不是问题,因为它看起来不像是一个可以复制到列下 20,000 个单元格中的公式,而是一个很好的一般原则。不这样做的唯一原因是,如果其中任何一个有一天可能需要不同的结果,在这种情况下,更新的维护将更加困难。权衡利弊,我们假设您最了解。但如果可行......

正如我所说的“收紧”,你最终可能会得到这样的结果:

=IF(D2="Approved","Approved",IF(AND(D2="Supplier Submittal",  E2="Interim Approval"),"Interim Approved",IF(OR(D2="Define",D2="Due Date Approval",D2="Initial Review",D2="Supplier Acceptance"),"Initial Review",IF(D2="No Status","Drawing Not Released",IF(D2="Polaris Review","Polaris Review",IF(D2="Staging","Waiting on Child Components",IF(OR(D2="Closed W/O Approval",D2="Needs Validation",D2="No PPAP Required",D2="Transferred"),IFERROR(INDEX(X:X,MATCH(A2,N:N,0)),"Needs Investigation"),IF(AND(D2="Supplier Submittal",C2<TODAY()),"Supplier Late",IF(AND(D2="Supplier Submittal",C2>TODAY(),C2<$J$1),"On Track for PV",IF(AND(D2="Supplier Submittal",C2>$J$1,INDEX(X:X,MATCH(A2,N:N,0))=""),"Due after PV",INDEX(X:X,MATCH(A2,N:N,0))))))))))))

或者更好的是,为了将来的工作,Alt-ENTER在每个结果的真实结果之后使用IF(),这样更容易阅读。

对于相互依赖性不强的长串可能性,另一种方法是使用IFS()Nesting就像这里所做的那样,可能会遇到限制,尽管不是在您的公式中。但其中一些很微妙,不会产生嵌套错误,而是看到所涉及的函数失败,或者 SPILL 功能导致函数像 SPILL 一样运行,但 SPILL 还不是这样,不过,这里也不是。只是您不需要嵌套本身,而且一长串对test, result if true非常容易构造:

  1. 选择一组单元格,宽度为 2,高度为任意多个,然后在每对单元格的左侧输入测试,在右侧输入结果。继续操作,直到将所有单元格写成一个漂亮的方块,宽度为 2,高度为任意多个(这里是 306 个单元格?)。一定要按正确的顺序进行操作,这样才能先进行正确的测试/得到结果,然后进行第二个测试,依此类推。
  2. 使用第三列对它们进行文本连接,但是这对您来说很有效:使用&,使用CONCATENATE(),使用CONCAT(),使用TEXTJOIN()......无论您喜欢什么,这样每对都会连接起来。
  3. 使用你喜欢的或你 Excel 版本中可用的任何方法来合并它们。我喜欢TEXTJOIN()这种事情。

就是这样:您拥有 中完整的测试和结果字符串IFS()。复制它,将其作为值粘贴,在它前面输入“IFS(”并在它后面输入“)”,这样您就拥有了一个完整的字符串,复制、粘贴为值,然后复制该字符串。转到您需要公式的单元格并开始编写它,当您到达需要它的地方时粘贴该字符串并完成公式。

最后一件事是IFS(),您可以在测试字符串中添加最后一个项目,并在其中产生结果:使用TRUE作为测试的最终对,因此无论 Excel 走到这一步,它都会成功,如果没有一个对成功,则结果为结果。您有这样的最后结果,因此您需要使用该技术。

相关内容