我正在尝试用 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 中,我会采用与前两个相同的格式。将每部分放在自己的行上。
下次当您遇到与大公式类似的问题时,请尝试像我上面所做的那样将其缩短,这样您就可以更轻松地发现错误。