
Я пытаюсь обернуть каждую формулу оператором ЕСЛИОШИБКА для моей вложенной формулы ниже. Я просмотрел другие источники и обнаружил, что это можно сделать с запятой между ними. Я думаю, что меня сбивает с толку то, что у меня есть оператор & " "
между каждым оператором 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 в самом конце. Давайте проигнорируем это пока и просто поработаем над частью ЕСЛИОШИБКА. Мы можем упростить ее еще больше, как мы сделали выше.
=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,"")
Скобки после первой ЕСЛИОШИБКА закрывают функцию 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, я бы отформатировал его так же, как и первые два. Сохраните каждый фрагмент на своей строке.
В следующий раз, когда у вас возникнет подобная проблема с большой формулой, попробуйте сократить ее, как я сделал выше, чтобы вам было легче обнаружить ошибку.