Подавить # N/A, возвращенный Google Таблицами vlookup

У меня есть Google Sheet (пример) с базовым vlookup для создания суммируемого столбца. Он возвращает "# N/A" для каждого ключа поиска, который не найден, и добавляет к этим ячейкам следующую ошибку:

Ошибка Не найдено значение "[email protected]" в оценке VLOOKUP.

После долгих поисков единственное решение, которое я нашел, заключалось в том, чтобы обернуть vlookup в IF (ISNA()), приведенный в разделе Как связать различные электронные таблицы Google с помощью IMPORTRANGE, содержащих формулы VLOOKUP, без возврата # N/A? , Это работает, но, похоже, мне не следует этого делать. Есть ли другой способ?

Ответ 1

Обновление 2019-03-01: Лучшее решение теперь - =IFNA(VLOOKUP(…), 0). Смотрите этот другой ответ.

  Вы можете использовать следующую формулу. Он заменит значения #N/A, возвращенные VLOOKUP(…), на 0.

=SUMIF(VLOOKUP(…),"<>#N/A")

Как это работает: Здесь используется SUMIF() только с одним значением для суммирования. В результате получается одно значение - если оно не равно #N/A, в соответствии с условием. Если значение равно #N/A, сумма равна нулю. Вот как работает SUMIF(): если никакие значения не соответствуют условиям, результатом будет 0, а не NULL, а не #N/A.

Преимущества:

  • По сравнению с решением =IF(ISNA(VLOOKUP(…)),"",VLOOKUP(…)), на которое ссылается вопрос, это решение содержит часть VLOOKUP(…) только один раз. Это делает формулу короче и проще и позволяет избежать ошибок, возникающих при редактировании только одной из двух частей VLOOKUP(…).

  • По сравнению с решением =IFERROR(VLOOKUP(…)) из другого ответа ошибки не подавляются, так как это затруднит их обнаружение и отладку. Только значения #N/A подавляются.

Ответ 2

Простейший способ подавить сообщения об ошибках - любой тип - использовать оболочку iferror:

=iferror(vlookup(A1,Lookup!A:B,2,FALSE))

Я не думаю, что это может быть проще. По дизайну vlookup не должен просто возвращать пустой, если ключ не был найден: это было бы неотличимо от ситуации, когда ключ был найден, но соответствующая запись во втором столбце была пустой. Должна быть выбрана некоторая ошибка, а затем - пользователю таблицы, как ее обрабатывать.

Ответ 3

=IFNA(VLOOKUP(...), "")

Не уверен, что это недавно изменилось, но реализация IFNA поддерживает единый список VLOOKUP. То есть вам не нужно оборачивать это в другой IF.

Преимущество заключается в том, что вы можете выбрать "", 0, NULL и т.д. В качестве значения, которое будет отображаться при сбое.