При ошибке в div / 0 в Excel 2007 возвращается 0 с в большой формуле - PullRequest
2 голосов
/ 15 декабря 2010

Я прошу прощения, если это не считается настоящим программированием, так как оно в Excel, но мне нужна помощь, и это самое полезное место, которое я знаю!

Хорошо, поэтому у меня есть очень большая формула в Excel:

=IF(AND(($EZ16+LF$1139)>$B$1145,($EZ16+LF$1139)<$B$1146),IF(OR(AND($FB16<LF$1141,$FB16>LF$1142),AND($FE16<LF$1141,$FE16>LF$1142),AND($FH16<LF$1141,$FH16>LF$1142),AND($FK16<LF$1141,$FK16>LF$1142),AND($FN16<LF$1141,$FN16>LF$1142),AND($FQ16<LF$1141,$FQ16>LF$1142),AND($FT16<LF$1141,$FT16>LF$1142),AND($FW16<LF$1141,$FW16>LF$1142),AND($FZ16<LF$1141,$FZ16>LF$1142),AND($GC16<LF$1141,$GC16>LF$1142),AND($GF16<LF$1141,$GF16>LF$1142)),FALSE,(EU16/EI16-1)),FALSE)

Что я могу сделать с этим, чтобы, если он возвращает ошибку div / 0, он передавал значение 0 вместо #DIV/0! ошибки?

Было бы что-то вроде:

=IF(ISERROR(A1/B1),0,A1/B1)

Если так, как я могу добавить это к моей текущей формуле и не нарушать ее? Будет ли это:

=IF(ISERROR(IF(AND(($EZ16+LF$1139)>$B$1145,($EZ16+LF$1139)<$B$1146),IF(OR(AND($FB16<LF$1141,$FB16>LF$1142),AND($FE16<LF$1141,$FE16>LF$1142),AND($FH16<LF$1141,$FH16>LF$1142),AND($FK16<LF$1141,$FK16>LF$1142),AND($FN16<LF$1141,$FN16>LF$1142),AND($FQ16<LF$1141,$FQ16>LF$1142),AND($FT16<LF$1141,$FT16>LF$1142),AND($FW16<LF$1141,$FW16>LF$1142),AND($FZ16<LF$1141,$FZ16>LF$1142),AND($GC16<LF$1141,$GC16>LF$1142),AND($GF16<LF$1141,$GF16>LF$1142)),FALSE,(EU16/EI16-1)),FALSE))**),0,IF**(AND(($EZ16+LF$1139)>$B$1145,($EZ16+LF$1139)<$B$1146),IF(OR(AND($FB16<LF$1141,$FB16>LF$1142),AND($FE16<LF$1141,$FE16>LF$1142),AND($FH16<LF$1141,$FH16>LF$1142),AND($FK16<LF$1141,$FK16>LF$1142),AND($FN16<LF$1141,$FN16>LF$1142),AND($FQ16<LF$1141,$FQ16>LF$1142),AND($FT16<LF$1141,$FT16>LF$1142),AND($FW16<LF$1141,$FW16>LF$1142),AND($FZ16<LF$1141,$FZ16>LF$1142),AND($GC16<LF$1141,$GC16>LF$1142),AND($GF16<LF$1141,$GF16>LF$1142)),FALSE,(EU16/EI16-1)),FALSE))

Спасибо за помощь!

EDIT: Тим А попробовал ваше предложение:

=IF(AND(($EZ16+LF$1139)>$B$1145,($EZ16+LF$1139)<$B$1146),IF(OR(AND($FB16<LF$1141,$FB16>LF$1142),AND($FE16<LF$1141,$FE16>LF$1142),AND($FH16<LF$1141,$FH16>LF$1142),AND($FK16<LF$1141,$FK16>LF$1142),AND($FN16<LF$1141,$FN16>LF$1142),AND($FQ16<LF$1141,$FQ16>LF$1142),AND($FT16<LF$1141,$FT16>LF$1142),AND($FW16<LF$1141,$FW16>LF$1142),AND($FZ16<LF$1141,$FZ16>LF$1142),AND($GC16<LF$1141,$GC16>LF$1142),AND($GF16<LF$1141,$GF16>LF$1142)),FALSE,IF(EI16=1,0,EU16/EI16-1)),FALSE)

Все еще появляется ошибка #DIV/0, есть идеи, почему?

Ответы [ 3 ]

4 голосов
/ 16 декабря 2010

В Excel 2007 появилась новая функция IFERROR, которую вы можете использовать, например

=IFERROR(MyLongFormula,0)
2 голосов
/ 15 декабря 2010

=IsError(100/0) вернет TRUE, поэтому сделайте условное условие до вывода 0, =IF(IsError(*),0,...)

1 голос
/ 15 декабря 2010

Я бы не рекомендовал дублировать всю формулу вот так: сложная формула стала вдвое сложнее.

Поскольку деление происходит только в одном месте, я бы рекомендовал поставить там чек.Это:

...(EU16/EI16-1)...

становится таким:

...IF(EI16=1, 0, EU16/EI16-1)...
...