如何使用 and 语句编写多个 iferror 语句

如何使用 and 语句编写多个 iferror 语句

我正在尝试用 IFERROR 语句包装下面嵌套公式的每个公式。我查看了其他来源,发现这可以通过在两者之间使用逗号来实现。我认为让我感到困惑的是,我在& " "每个 if 语句之间都有逗号(我需要保留它)。

以下是我原来的配方和我尝试过的最新配方。配方不起作用。我不确定如何正确执行此操作。我做错了什么?

原始配方

=TRIM(
IFERROR(
IF(AND($T9-TODAY()>=Key!$N$14,$T9-TODAY()<=Key!$M$14,$AA9<>"Complete",$G9<>"New Phase"),Key!$L$11,"")
& " "
& IF(AND($U9-TODAY()>=Key!$N$15,$U9-TODAY()<=Key!$M$15,$AB9<>"Complete",$G9<>"New Phase"),Key!$L$10,"")
& " "
& IF(AND($M9-TODAY()>=Key!$N$9,$M9-TODAY()<=Key!$M$9,$Z9<>"Complete"),Key!$L$9,"")
& " "
& IF(AND($AH9-TODAY()>=Key!$N$16,$AH9-TODAY()<=Key!$M$16,$AE9<>"Complete"),Key!$L$16,"")
,"error"))

新配方

=TRIM(
IFERROR(
IF(AND($T9-TODAY()>=Key!$N$14,$T9-TODAY()<=Key!$M$14,$AA9<>"Complete",$G9<>"New Phase"),Key!$L$11,"")
,"Error MUC Video")),
& " "
IFERROR(
& IF(AND($U9-TODAY()>=Key!$N$15,$U9-TODAY()<=Key!$M$15,$AB9<>"Complete",$G9<>"New Phase"),Key!$L$10,"")
,"Error SMR Video"))
& " "
& IF(AND($M9-TODAY()>=Key!$N$9,$M9-TODAY()<=Key!$M$9,$Z9<>"Complete"),Key!$L$9,"")
& " "
& IF(AND($AH9-TODAY()>=Key!$N$16,$AH9-TODAY()<=Key!$M$16,$AE9<>"Complete"),Key!$L$16,"")

答案1

您有一个大而混乱的公式,其格式经过了某种处理,使其更易读。我将首先使其更短,以便更容易理解。首先,让我们摆脱所有大 AND 语句:

=TRIM(
IFERROR(
IF(AND(a1,a2,a3,a4),a99,"")
& " "
& IF(AND(b1,b2,b3,b4),b99,"")
& " "
& IF(AND(c1,c2,c3),c99,"")
& " "
& IF(AND($d1,d2,d3),d99,"")
,"error"))

实际上,让我们完全删除它们。我们只需使用一个替代的 AND 公式:

=TRIM(
IFERROR(
IF(a1,a99,"")
& " "
& IF(b1,b99,"")
& " "
& IF(c1,c99,"")
& " "
& IF(d1,d99,"")
,"error"))

现在我们可以更轻松地理解这一点。TRIM 将删除空格,IFERROR 会捕获错误。IFERROR 里面有什么?它是几个字符串的串联:

IF(a1,a99,"") & " " & IF(b1,b99,"") & " " & IF(c1,c99,"") & " " & IF(d1,d99,"")

你看到每个 IF 之间都有空格了吗?只需在&字符串之间添加一个 & 符号,即可将它们组合起来。在本例中,字符串是 IF 返回的内容,空格是" "

现在,假设您想将其中一个 IF 包装在 IFERROR 中。让我们看看您在问题中是如何做到这一点的,同样进行一些简化:

=TRIM(
IFERROR(
IF(AND(a1,a2,a3,a4),a99,"")
,"Error MUC Video")),
& " "
IFERROR(
& IF(AND(b1,b2,b3,b4),b99,"")
,"Error SMR Video"))
& " "
& IF(AND(c1,c2,c3),c99,"")
& " "
& IF(AND($d1,d2,d3),d99,"")

我已经知道括号里( )有些地方搞错了,因为最后只有 1。现在我们先忽略它,只处理 IFERROR 部分。我们可以像上面那样进一步简化它。

=TRIM(
IFERROR(
IF(a1,a99,"")
,"Error MUC Video")),
& " "
IFERROR(
& IF(b1,b99,"")
,"Error SMR Video"))
& " "
& IF(c1,c99,"")
& " "
& IF(d1,d99,"")

这仍然有点难以阅读。如果我们将其格式化如下会怎样:

=TRIM(
      IFERROR(
              IF(a1,a99,""),"Error MUC Video"
             )
     ),
 & " "
 IFERROR(
         & IF(b1,b99,""),"Error SMR Video"
        )
 )
 & " "
 & IF(c1,c99,"")
 & " "
 & IF(d1,d99,"")

第一个 IFERROR 后面的括号关闭了 TRIM 函数。
第二个 IFERROR 带有 & 符号& 里面函数。它应该在函数之前。
第二个 IFERROR 后面的括号与任何左括号都不匹配。
右括号后的逗号也不应该存在。
它缺少 TRIM 函数的右括号。
公式应该更像这样:

TRIM( IFERROR() & " " & IFERROR() & " " & IF() & " " & IF() )

考虑到所有这些因素,我认为,如果您的最终公式采用如下格式,则最适合您:

=TRIM(
IFERROR(IF(AND($T9-TODAY()>=Key!$N$14,$T9-TODAY()<=Key!$M$14,$AA9<>"Complete",$G9<>"New Phase"),Key!$L$11,""),"Error MUC Video")
& " " & 
IFERROR(IF(AND($U9-TODAY()>=Key!$N$15,$U9-TODAY()<=Key!$M$15,$AB9<>"Complete",$G9<>"New Phase"),Key!$L$10,""),"Error SMR Video")
& " " & 
IF(AND($M9-TODAY()>=Key!$N$9,$M9-TODAY()<=Key!$M$9,$Z9<>"Complete"),Key!$L$9,"")
& " " & 
IF(AND($AH9-TODAY()>=Key!$N$16,$AH9-TODAY()<=Key!$M$16,$AE9<>"Complete"),Key!$L$16,"")
)

如果您想将最后两个 IF 语句包装在它们自己的 IFERROR 中,我会采用与前两个相同的格式。将每部分放在自己的行上。


下次当您遇到与大公式类似的问题时,请尝试像我上面所做的那样将其缩短,这样您就可以更轻松地发现错误。

相关内容