пятница, 26 июня 2009 г.

Как бороться с "#Н/Д"

Если функция ВПР возвращает значение #Н/Д (нет данных) значит она не находит искомое значение, это полезная информация т.к. позволяет сравнивать данные двух таблиц. С другой стороны #Н/Д в столбце данных не позволяет производить по нему математические операции, например суммирование.


Рисунок 1.

Решить это проблему позволяет конструкция из трех функций ЕСЛИ(), ЕНД(), и собственно ВПР(). Выглядит это так:

=ЕСЛИ(ЕНД(ВПР($A1;База_данных;2;ЛОЖЬ));0;ВПР($A1;База_данных;2;ЛОЖЬ))

Учитывая, что функция ЕНД() возвращает значение ИСТИНА если функция ВПР возвращает значение #Н/Д и ЛОЖЬ - если нет, смысл конструкции можно описать так. Если функция ВПР равна #Н/Д, тогда возвратить 0, в противном случае - возвратить значение функции ВПР.

Рисунок 2.

Указанная конструкция с небольшими изменениями позволяет посчитать количество совпадение в двух базах данных. Например:

=ЕСЛИ(ЕНД(ВПР($A1;База_данных;2;ЛОЖЬ));0;1)

При каждом совпадении функция вернет 1, количество единиц и есть число совпадений.

Рисунок 3.

Варианты задания параметров

Бывают случаи, когда в области данных нет столбца с уникальными данными, т.е. значения в столбце, по которому производится поиск, могут повторяться. В этом случае функция ВПР, просматривая данные по столбцу поиска, остановится на первом найденном значении A1. Для решения этой проблемы можно попробовать создать дополнительный столбец, с уникальными значениями объединив значения нескольких столбцов с помощью функции =СЦЕПИТЬ(A1;B1). Тогда искомое значение можно задать следующим образом:

=ВПР(СЦЕПИТЬ($A1;$B1);База_данных;2;ЛОЖЬ)

При необходимости, чтобы добиться уникальных значений, можно объединять два и более столбцов. Пример.

Следует помнить, что функция =СЦЕПИТЬ(A1;B1) возвращает значения в текстовом формате поэтому, и искомое значение должно иметь текстовый формат. Эту ошибку неопытные пользователи допускают достаточно часто, коварство ее заключается в том, что "на глаз" вроде бы значения совершенно одинаковы а функция его не находит и возвращает #НД.

Для того чтобы производить поиск по фрагменту А1 возможно применять функции обработки текста ПСТР(), ЛЕВСИМВ(), ПРАВСИМВ() и т.д. Например: если A1 имеет значение 018508102 а искать надо только по седьмому и восьмому знаку этого значения (т.е. 10), это можно решить следующим образом образом:

=ВПР(ПСТР($A1;7;2);База_данных;2;ЛОЖЬ)

Вместо А1 возможно использовать саму функцию ВПР, это бывает необходимо когда искомое значение зависит от значений формируемой таблицы и представляет из себя множество значений. Например:

=ВПР(ВПР($A1;ТАБЛИЦА1;4;ЛОЖЬ);База_данных;2;ЛОЖЬ)

Здесь в ТАБЛИЦА1 по значению А1 находят искомое значение для области данных База_данных и на основании его выбирают значение из столбца 2.

Применяя функцию ВПР, ссылку на столбец лучше делать абсолютной, а на строку оставлять относительной. Это позволит, без ручной правки, скопировать функцию по всем ячейкам таблицы. Но вот номер столбца, откуда необходимо брать данные, остается без изменений, т.е. во все ячейки будут возвращены данные из заданного первоначально (в нашем примере второго столбца). Конечно, можно вручную изменить номер столбца, если табличка небольшая, а если в ней больше сотни столбцов, что делать? В этом случае возможно заменить номер столбца, функцией =СТОЛБЕЦ(B:B). Например:

=ВПР($A1;База_данных;СТОЛБЕЦ(B:B);ЛОЖЬ)

При копировании функции ВПР по строке адреса столбцов будут автоматически пересчитываться, и возвращаемый номер столбца меняться. Если необходимо, его можно подкорректировать до нужного значения. Например:

=ВПР($A1;База_данных;СТОЛБЕЦ(B:B)-1;ЛОЖЬ)

Функция ВПР

Функция ВПР, пожалуй, одна из самых красивых функций в наборе Excel. Вариантов ее применения множество. Основное применение - поиск совпадений в разных списках (базах данных). Синтаксис написания формулы следующий:

=ВПР(A1;База_данных;2;ЛОЖЬ)

Рассмотрим параметры функции ВПР:

A1 - это относительная ссылка на ячейку листа Excel, в которой находится искомое значение. Под относительной ссылкой понимается то, что при копировании формулы по столбцам/строкам ссылка будет меняться соответственно. Чтобы при копировании формулы в другие столбцы/строки ссылка на столбец/строку не изменялась ее можно сделать абсолютной по одному/обоим параметрам. Например:
$A$1 - абсолютная ссылка по столбцу и по строке;
$A1 - абсолютная по столбцу, относительная по строке;
A$1 - относительная по столбцу, абсолютная по строке;
A1 - относительная ссылка по столбцу и строке.
Значек $ можно вставить в формулу вручную, либо выделить в строке формул ссылку и последовательно нажимая F4 добиться нужного результата.
База_данных - имя области данных в первом столбце которой, производится поиск совпадения значения с параметром A1. Столбец по которому производится поиск всегда должен быть первым. Область данных можно также задать указав адрес левой верхней и правой нижней ячейки. Например:

=ВПР(A1;Лист2!A1:H30;2;ЛОЖЬ)

В приведенном примере ссылка на область данных относительная, это означает что при копировании формулы адрес области данных будет изменяться, что приведет к ошибкам, поэтому ссылку надо делать абсолютной. Например:

=ВПР(A1;Лист2!$A$1:$H$30;2;ЛОЖЬ)

Третий параметр функции ВПР - "2" - номер столбца откуда функция будет брать данные при нахождении искомого значения A1. Если номер столбца указан неверно (напрмер в области всего 8 столбцов а указали 9), функция ВПР вернет значение #ССЫЛКА!.

Параметр ЛОЖЬ означает что функция ВПР будет искать точное совпадение значения в ячейке A1 со значениями в первом столбце области данных. При нахождении такого значения функция вернет значение из заданного столбца (в данном примере - второй столбец) области данных. Если значение A1 не найдено, функция ВПР вернет #Н/Д - нет данных. Вторым значением этого параметра может быть ИСТИНА. В этом случае функция ВПР будет искать ближайшее к искомому значению A1. Честно говоря механизм определения этого ближайшего значения до конца не ясен, особенно когда искомое значение текст. Поэтому применение функции ВПР с параметром "ИСТИНА" встречается достаточно редко.

Для начала

Если Вас заинтересовал предложенный материал, буду рад получить Ваши комментарии и ответить на вопросы.

Предлагаемые решения я придумал сам и неоднократно применял их в процессе работы. Надеюсь, что и Вам они пригодятся. Использование - бесплатно

Для уточнения и полезных советов пишите мне на E-mail:boris-1204@yandex.ru.