
У меня есть следующая формула.
=TRIM(
IFERROR(IF(AND($T9-TODAY()>=Key!$N$14,$T9-TODAY()<=Key!$M$14,$AA9<>"Complete",$G9<>"New Phase",$T9<>""),Key!$L$11,""),"Error")
)
Я заметил, что часть "Ошибка" IFERROR
была запущена. Поэтому после просмотра моей формулы я был почти уверен, что причина была в том, что столбец T иногда был пустым. Поэтому я поставил следующую проверку на место $T9<>""
. Однако после добавления этого "Ошибка" все еще отображается.
Разве добавленное мной условие не должно привести к выполнению части условия "ЛОЖЬ"? Которая просто "".
Есть ли у кого-нибудь информация?
решение1
В вашей формуле нет сбоя построения, так что проблема не в этой причине. Как написано, это работает, логически, так что сбой в создании должен быть вызван либо функциями использования и т. п., либо значениями, которые они используют.
Под «функциями использования...» я подразумеваю, что иногда формирование использования вызывает проблемы из-за промежуточных шагов, о которых можно не подумать. Например, если использовать фальшивый пример, «фальшивый», потому что это не то, что на самом деле могло бы вызвать проблему (но ни один реальный пример не приходит на ум), скажем, проблема была в вычитании TODAY()
из значения и последующем сравнении его с каким-то другим значением. Например:
=$T9 - TODAY() <= Key!$M$14
Представьте, что Excel выдаст ошибку, если левая половина выдаст отрицательное значение во время вычисления этой формулы. (Это НЕ так, потому что Excel не учитывает "тип" при обработке, поэтому он не ожидает результат в виде даты и поэтому не выдает ошибку, если в результате получится отрицательное значение. Но представьте.) Таким образом, Excel получит это отрицательное значение в качестве своего первого шага при вычислении формулы и ошибку прямо тогда, не продвигаясь вперед. Он перенесет эту ошибку в каждое последующее вычисление, и поэтому конечный результат внутри IFERROR()
будет ошибкой и даст вам этот результат.
(Опять же, это притворство. Но в качестве примера того, как можно быстро это преодолеть, вы можете просто алгебраически переместить TODAY()
в правую сторону, где оно предположительно будет добавлено к положительному значению, поэтому при оценке оно никогда не даст промежуточный результат, который будет отрицательным, и никогда не вызовет ошибку. После оценки правая сторона потеряет аспект даты, став просто числом, и все забавные дела закончатся. Поэтому часто доступны простые исправления.)
Как я уже сказал, это НЕ проблема ни с одним компонентом вашей формулы. Так что теперь у вас осталась единственная реальная возможность: some component (cell) used in one of the
AND() components contains an error
.
Это не зависит от того, например, действительно ли вы этого хотите или Key!$M$9
нет , или есть ли какие-либо соображения такого рода.Key!$M$14
T14
T9
(За исключением косвенного способа: если есть неправильно выбранный член формулы, скажем, необходимость T9
быть T14
И T9
случается, что в нем есть ошибка, а T14
не ошибка.)
Так что выберите использование формулы, которая усиливает IFERROR()
вместо того, чтобы успешно оценивать, и посмотрите на каждую из ячеек, на которые она ссылается. Хороший, быстрый способ сделать это — скопировать формулу в одну из ячеек, которая дает Error
(нажмите F2, выделите все и скопируйте, затем перейдите в какое-нибудь пустое место, чтобы вы могли работать, не повреждая ничего, и нажмите F2 и Вставить — формула будет иметь точно такие же ссылки, как и там, где вы ее взяли dies). Затем в ячейках под формулой поместите =
и каждую ссылку на ячейку. Итак:
=T9
=Key!$n$14
и так далее. Теперь вы видите все в чистом виде, так сказать. Если один из компонентов показывает ошибку Excel (например, ячейка делит на 0 для своего результата), то у вас есть виновник. Если повезет, только один виновник.
Это часто становится проблемой при создании электронной таблицы, когда кто-то вносит тестовое изменение, затем понимает, что для выполнения теста нужны еще одно и еще одно, и так далее, создавая несколько ветвлений работы, но не может найти путь обратно к хорошей отправной точке, чтобы внести несколько различных необходимых изменений (поэтому вместо включения ветвлений, в конечном итоге получается, что они сдавливают друг друга странными способами), и это часто приводит к реальным несовпадениям в используемых адресах ячеек, таких как T9 и Key!$M$14, кажущиеся несовпадающими адресами. Но так же, как это кажущееся несовпадение может быть идеальным совпадением, этот путь может не привести к ним. Просто часто.
Однако я бы сказал, что FAR более распространенной проблемой являются предшествующие формулы, приводящие к ошибкам, и поэтому обращение к их ячейкам в зависимых формулах приводит к ошибочным результатам. Это может произойти по многим причинам, но поскольку люди обычно считают, что проблемы с формулами являются проблемами построения, они редко оглядываются на фактически вызванные ячейки. Особенно, когда первое использование работало хорошо, и только некоторые из «скопированных и вставленных» формул приводят к ошибкам.
Поэтому, как бы вы это ни делали, вы должны выбрать один из результатов сбоя и просмотреть КАЖДУЮ адресованную ячейку компонента, независимо от того, «знаете» ли вы», что один или несколько из них «просто не могут» вызывать ошибку.
Одна вещь, о которой я забыл упомянуть, это то, что я настроил формулу, вплоть до названий листов, имеющих листы и так далее, и она работает ИДЕАЛЬНО. Пока я не создам условие ошибки в одной из ячеек, на которые ссылаются. Так что работа, как построено, и предоставление правильного результата для ИСТИННЫХ и ЛОЖНЫХ ветвлений вашего IF()
тестируется — в аккуратной настройке, которая не имеет ошибок в ячейках, на которые ссылаются. Однако добавьте ошибку в любую из них, и она вернется к результату IFERROR()
.
решение2
Я предполагаю, что формула в A18 ссылается на T18 (показанная формула использует T9). Вы можете изменить IF(T9<>"" на IF(ISBLANK(T9). <>"" возвращает значение TRUE только в том случае, если там есть пробел. На снимке экрана ниже показаны похожие результаты с подробностями формулы и содержимым ссылающихся ячеек.
Надеюсь, это поможет.