Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР

Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост

Многие из вас встречались с этой полезной функцией MS Excel ВПР (VLOOKUP). Это, безусловно, очень полезный инструмент агрегации и трансформации данных. Но, к сожалению, данная функция имеет ряд ограничений. Ниже мы рассмотрим несколько трюков, которые позволят нам преодолеть эти ограничения.


Первое ограничение функции ВПР - это обязательный параметр "номер_столбца" ("col_index_num").

Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост

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

Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост
Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост

Как видно из примера выше, вместо данных из столбца Data функция вернула данные из столбца Class, т.к. он теперь стал вторым относительно столбца Name.


Также нужно иметь в виду, что если через ВПР агрегируется несколько элементов данных, то в случае внесения корректировок в массив данных потребуется вносить ручные правки во все параметры "номер_столбца".


Чтобы избежать этих трудозатратных манипуляций, можно использовать функцию ПОИСКПОЗ (MATCH). Она позволяет определить позицию искомого поля в массиве поиска.

Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост

где бы оно не находилось...

Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост

Дополнительным бонусом от использования функции ПОИСКПОЗ в данном случае будет еще и легко изменяемое искомое поле данных. Нужно просто поменять первый параметр "искомое_значение" ("lookup_value") функции ПОИСКПОЗ (в приведенном примере это ячейка В1).

Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост

Второе ограничение функции ВПР  - обязательное требование о расположении в массиве поиска столбца с искомыми значениями строго слева от столбцов с данными. Если столбец с искомыми значениями (столбец Name в примере) не первый слева направо, то функция ВПР не вернет никаких данных из столбцов с данными (столбцы Class Data в примере).

Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост

Чтобы обойти это ограничение, надо воспользоваться функцией СМЕЩ (OFFSET) вместо функции ВПР. Данная функция состоит из трех обязательных параметров: ссылка (reference), смещение по строкам (rows), смещение по столбцам (cols). СМЕЩ возвращает значение ячейки, расположенной в X строках (смещение по строкам) и в Y столбцах (смещение по столбцам) от указанной ячейки (ссылка). Но чтобы получить максимальный эффект от этой функции, ее следует использовать вместе с двумя функциями ПОИСКПОЗ вместо параметров смещение по строкам и смещение по столбцам.

Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост

ВАЖНО! Пожалуйста, не забывайте, что функция ПОИСКПОЗ возвращает порядковый номер ячейки с искомым значением в массиве, когда как в функции СМЕЩ смещение по строкам и смещение по столбцам - это количество шагов от начальной ячейки. Т.е. необходимо в обязательном порядке вычесть 1 из полученных функциями ПОИСКПОЗ результатов.

Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост

Итак, получаем формулу следующего вида:

СМЕЩ(начальная ячейка; ПОИСКПОЗ(искомое значение; массив поиска; тип сопоставления) - 1; ПОИСКПОЗ(искомое значение; массив поиска; тип сопоставления) - 1)

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


Для того, чтобы сделать эту формулу супергибкой и чтобы легко менять не только данные с результатами (Class и Data в примере), но и искомые данные (Name в примере), нужно поместить внутрь первой функции ПОИСКПОЗ (вместо искомое значение) еще одну функцию СМЕЩ с функцией ПОИСКПОЗ внутри. Такая формула будет самостоятельно определять столбец с искомыми значениями на основании значения ячейки А1. Таким образом, модифицированная формула будет иметь следующий вид:

СМЕЩ(начальная ячейка; ПОИСКПОЗ(искомое значение; СМЕЩ(начальная ячейка; 0, ПОИСКПОЗ(искомое значение; массив поиска; тип сопоставления) - 1); массив поиска; тип сопоставления) - 1; ПОИСКПОЗ(искомое значение, массив поиска, тип сопоставления) - 1)

Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост
Excelling at Excel вып.1: Преодолеваем ограничения функции ВПР Microsoft Excel, Функция, Длиннопост

Выглядит сложно, но при построении сложных гибких решений - вещь очень удобная.

9
Автор поста оценил этот комментарий

Индекс проще, имхо.

раскрыть ветку
11
Автор поста оценил этот комментарий

Класс, только я так и не узнал что делает и зачем мне нужно ВПР.

раскрыть ветку
2
Автор поста оценил этот комментарий
Буду проституткой!
2
Автор поста оценил этот комментарий
Круто! Завтра буду пытаться колхозить к своим рабочим файлам)
2
Автор поста оценил этот комментарий
Большинство пользователей числа через плюс складывает. А вы про замену ВПР, да ещё и через три формулы. А тем кому надо обойти ограничения power pivot, со связью массивов, в руки.
раскрыть ветку