Многоразовый ВПР (VLOOKUP)

Имеем список заказов с номерами и названиями товаров. Хотелось бы, для примера, вытаскивать из таблицы по номеру заказа все товары, которые в него входят. Примерно так:

vlookup_all1.gif

 

Замечательная функция ВПР (VLOOKUP) в такой ситуации поможет только частично, т.к. умеет вытаскивать данные только по первому найденному соответствию, т.е. даст нам только Яблоки. Для нахождения и извлечения из таблицы всех наименований лучше использовать формулу массива. Вот такую:

=ИНДЕКС($B$2:$B$16;НАИМЕНЬШИЙ(ЕСЛИ($E$2=A2:A16;СТРОКА(B2:B16)-1;"");СТРОКА()-5))

Ее надо ввести следующим образом:

  1. выделить ячейки, куда должны выводиться результаты (в нашем примере - это диапазон D6:D20)
  2. ввести (скопировать формулу в первую ячейку) диапазона
  3. нажать Ctrl + Shift + Enter

Вычитание единицы в фрагменте СТРОКА(B2:B16)-1 делается из-за шапки таблицы. По той же причине для компенсации сдвига результирующего диапазона относительно исходного вычитается число пять во фрагменте СТРОКА()-5

Чтобы скрыть ошибку #ЧИСЛО!, которая будет появляться в незаполненных ячейках результирующего диапазона D6:D20 можно использовать функции проверки ошибок ЕСЛИ и ЕОШ, заменив нашу формулу чуть более сложной:

=ЕСЛИ(ЕОШ(ИНДЕКС($B$2:$B$16;НАИМЕНЬШИЙ(ЕСЛИ($E$2=A2:A16;СТРОКА(B2:B16)-1;"");СТРОКА()-5)));"";ИНДЕКС($B$2:$B$16;НАИМЕНЬШИЙ(ЕСЛИ($E$2=A2:A16;СТРОКА(B2:B16)-1;"");СТРОКА()-5)))

В Excel 2007 появилась более удобная функция ЕСЛИОШИБКА - она позволяет решить задачу более компактно:

=ЕСЛИОШИБКА(ИНДЕКС($B$2:$B$16;НАИМЕНЬШИЙ(ЕСЛИ($E$2=A2:A16;СТРОКА(B2:B16)-1;"");СТРОКА()-5));"")

P.S.

В англоязычной версии Excel эти функции будут выглядеть так:

=INDEX($B$2:$B$16,SMALL(IF($E$2=A2:A16,ROW(B2:B16)-1,""),ROW()-5))

=IF(ISERR(INDEX($B$2:$B$16,SMALL(IF($E$2=A2:A16,ROW(B2:B16)-1,""),ROW()-5))),"",INDEX($B$2:$B$16,SMALL(IF($E$2=A2:A16,ROW(B2:B16)-1,""),ROW()-5)))

=IFERROR(INDEX($B$2:$B$16,SMALL(IF($E$2=A2:A16,ROW(B2:B16)-1,""),ROW()-5)),"")

Ссылки по теме

 


Страницы: 1  2  3  
17.01.2015 22:35:13
У меня похожая задача. Есть организация с несколькими объектами. Нужно вывести список объектов. Сколько не бьюсь - ничего не получается. Попробовала точ в точ набрать Ваш пример - тоже ничего не выходит. Не могу понять, почему. Формат ячеек "общий".
04.02.2015 12:50:51
Большое спасибо за ценный пример. Давно искал способ делать такие выборки.
В моем случае заработало не с первого раза: в диапазоне ячеек была одна со значением #Н/Д
24.02.2015 16:29:31
Всем привет, и большое спасибо Николаю очень выручил этот прием. Но скажем если мне необходимо проводить выборку данных не по одному параметру как в примере а по двум или трём. Скажем есть в таблице еще поле склад т.е вводим номер партии, склад и получаем результата. Я пытался после "ЕСЛИ" добавить функцию "И" но у меня почему-то ничего не выходит. Пишет ошибку "ЗНАЧ!".
15.08.2015 10:55:30
Не сразу смог разобраться, но в итоге очень полезно, спасибо.
16.08.2015 17:05:04
Ааа!
Главное не просто Enter нажимать, а Ctrl + Shift + Enter!
...и тогда все будет работать! ;)
21.09.2015 15:21:01
Подскажите пожалуйста,  в столбце Е находится формула массива, которая позволяет отбирать коды из столбца А, если рядом (в столбце В) находятся значения. Как преобразовать эту формулу для нескольких массивов, в данном случае добавить еще кода из столбца С?
код1знач.код2знач.заказ
110610{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$6;НАИМЕНЬШИЙ(ЕСЛИ($B$2:$B$6>0;СТРОКА($B$2:$B$6)-1);СТРОКА(E1)));"";)}
27
{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$6;НАИМЕНЬШИЙ(ЕСЛИ($B$2:$B$6>0;СТРОКА($B$2:$B$6)-1);СТРОКА(E2)));"";)}
3208{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$6;НАИМЕНЬШИЙ(ЕСЛИ($B$2:$B$6>0;СТРОКА($B$2:$B$6)-1);СТРОКА(E3)));"";)}
4920{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$6;НАИМЕНЬШИЙ(ЕСЛИ($B$2:$B$6>0;СТРОКА($B$2:$B$6)-1);СТРОКА(E4)));"";)}
51010{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$6;НАИМЕНЬШИЙ(ЕСЛИ($B$2:$B$6>0;СТРОКА($B$2:$B$6)-1);СТРОКА(E5)));"";)}
22.09.2015 11:08:29
Уже дали ответ: {=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$6;НАИМЕНЬШИЙ(ЕСЛИ($B$2:$B$6>0;СТРОКА($B$2:$B$6)-1);СТРОКА(E1)));ЕСЛИОШИБКА(ИНДЕКС($C$2:$C$6;НАИМЕНЬШИЙ(ЕСЛИ($D$2:$D$6>0;СТРОКА($D$2:$D$6)-1);СТРОКА(E1)-СЧЁТЕСЛИ($B$2:$B$6;">0")));""))} или вот лаконичнее {=НАИМЕНЬШИЙ(ЕСЛИ((B$2:$99>0)*ОСТАТ(СТОЛБЕЦ(A$2:C$99);2);A$2:C$99);СТРОКА(A1))}
28.12.2015 16:03:25
А если к товару приложить еще количество (например в кг) и соответственно возле зеленых ячеек с наименованием товаров, входящих в заказ выводилось еще и соответствующее количество килограммов, тогда как?
11.03.2016 11:18:01
Большое спасибо автору!Очень полезно!
Не подскажите,как и что нужно добавить чтобы поиск был по 2-м переменным?
То есть в данном примере идет поиск по Е2 (№ заказа) ,а что если мне нужно добавить еще одно условие?
Например эта таблица будет иметь еще колонку с датами.Тогда мне нужно искать и по №заказа и по дате.И вывести все,что будет соответствовать этим двум параметрам.Заранее спасибо!
Присоединяюсь ко всем словам благодарности! Полтора дня ломал голову как это сделать, пока один коллега не посоветовал ваш сайт.  Всё получилось с первого раза.  Завтра буду пробовать (как и многие) выводить список по двум параметрам.
Получилось!! Элементарно!..  
Примерно так:   =IF(AND(A2=$P$1;G2=$Q$1);ROW(C2)-1) - это конкретно из моего отчета.
В столбце C (на видео) прописываем двойное условие, и заводим ещё одну ячейку с нужным параметром ( как Е2), к примеру в F2.
Обе эти ячейки я сделал выпадающим списком: при пересечении  двух условий выводится нужный результат.  (Работаю с клиентской базой в отделе продаж).  Условия  в моем случае это маршрут продаж  и день недели, при  "пересечении" которых выпадает список клиентов.

Ещё раз СПАСИБО!  Для меня это большой шаг в собственном развитии!
17.03.2016 14:32:54
Добрый день Николай! А подскажите можно ли данную функцию использовать в проверке данных (как двухуровневый выпадающий список), т.е. в Проверке данных выбрать Список и на основании ячейки Слева (например) в ячейке выпадал только список "Субсчетов" ячейки "Счет".
25.03.2016 12:42:03
Товарищи, а как сделать обратную функцию, кто подскажет? Когда есть список контрагентов, к каждому контрагенту есть подгруппа договоров. Как вывести их в отдельный список, чтобы наименование контрагента было напротив каждого из договоров?
19.04.2016 08:09:25
Всем привет!
Подскажите пож., как можно сделать так, чтобы из этого результата получить выпадающий список, без того чтобы они записывались на лист?
Пробовал эту формулу вставить в "источник списка" он ничего не находит(
27.04.2016 16:43:59
Функция нахождения всех значений, а не только первого, не сработает, если зотя бы в одной ячейке из индексируемых будет присутствовать значение #Н/Д
Добавьте пожалуйста в описание.  
27.10.2016 14:52:11
Добрый день!
Подскажите , пожалуйста, возможно ли применить многоразовый ВПР для нескольких страниц?
Я применяла функцию =ИНДЕКС($L$2:$L$35;ПОИСКПОЗ(ИСТИНА;СЧЁТЕСЛИ(ДВССЫЛ("'"&$L$2:$L$35&"'!D4: D200";D3)>0;0))
Данная функция работает, но отбирает только лишь один показатель по критерию отбора , а их допустим три на всех имеющихся листах.  
07.11.2016 10:06:43
Добрый день!

Подскажите пожалуйста формулу в случае если оставить в исходной задаче все без изменения кроме того, что за место цифр в столбце "номер заказа" подставить слова и искать не по точному совпадению, а по наличию слова в ячейке. Например нужно вытащить все номера изделий, напротив, которых в столбце "цвет краски" имеется слово "синий":
Цвет краски №изделия
синий131
светло синий221
темно синий 312
желтый 322
светло желтый417
Желаемый результат работы формулы должен быть таким:
синий131221312
желтый322417
Очень поможете если такая формула есть, иначе руками 27000 наименований прийдется обрабатывать.
26.05.2017 08:48:24
Добрый день, Мирас,
Кажется, у меня есть решение Вашей задачи, если, конечно, решение еще не найдено. :)
09.11.2016 15:05:22
Здравствуйте, Николай! Спасибо за Вашу помощь!
Помогите, пожалуйста, с такими трудностями:
1.Как вывести результаты по заданных критериях в виде списка в одном столбце подряд?
Т.е. если произошла выборка всех результатов согласно первого критерия, то приступить ко второму и выдать результаты согласно второго критерия под результатами первого...
Возможно ли это прописать формулой?
Если исключительно макросом, то подскажите, пожалуйста, где искать и на что опираться.
Очень нужно!
Заранее спасибо!
14.12.2016 12:17:44
Привет. У меня планшет Самсунг, Эксель в приложении OffiseSuite, на клавиатуре нет Shift, а нужны массивные функции.
К тому же я любитель!

Вот что произошло с предлагаемой вами формулой. Задачи одинаковые поменялись лишь аргументы ( номера столбцов и строк,- диапазоны)
Ваша формула
=INDEX($B$2:$B$16,SMALL(IF($E$2=A2:A16,ROW(B2:B16)-1,""),ROW()-5))
Мой аналог
=INDEX($D$5:$D$14,SMALL(IF($S$2=B6:B15,ROW(D6:D15)-4,""),ROW()-5)) не работает: менял оба смещения подбирал.

=INDEX($D$5:$D$14,SMALL(IF($S$2=B6:B15,ROW(D6:D15)-4,""),1)) с этим изменением работает.
Вопросов много. Нужен диалог
14.12.2016 12:51:02
Теперь бъюсь над ошибками, что забивают пустые ячейки. В арсенале нет =IFERROR, а надо сделать переход по условию "ошибка"
Вот одна подсказка:
"Думаю да. Во всяком случае с ВПР у меня такое работало.
Как-то так попробуйте:
=ЕСЛИ(ЕНД(A1);"Мама";"Рама") "
Пробую
22.01.2017 15:44:42
А если в таблице не две, а несколько колонок? Если это будет работать - напишите, plz, как можно выводить все остальные, заранее спасибо!
Доброго дня! Мне очень нужно , чтобы найденная информация , помещалась не в столбец, а в одну ячейку через запятую . Как это можно реализовать?
И еще мне нужно чтобы информация , собиралась не по одному столбцу, а по 2-3.
Помогите пожалуйста
Добрый день! А как вытащить не "яблоко" или весь список, а только последнее "авокадо"?
22.04.2017 10:00:40
Владимир, поменяйте в формуле НАИМЕНЬШИЙ на НАИБОЛЬШИЙ - и будет вытаскивать в обратном порядке, т.е. начнет сразу с последнего :)
19.07.2021 07:16:50
Добрый день! Воспользовалась Вашей формулой, мне нужно одно наибольшее значение, но в таблице имеются пустые ячейки (без них никак), как их исключить для вывода только последнего непустого значения.
27.06.2017 19:09:10
Спасибо Вам за подробное пояснение! Очень помогло в решении задачки, над которой я ( в силу "начинания" пользования экселем ) долго мучался)
03.08.2017 14:46:54
Здравствуйте,
как улушить мульти ВПР чтоб он искал по выбранным столбцам?

Задача: таблица с названием магазинов в 6 торговых центрах, мне необходимо создать обновляемую таблицу где можно будит из выпадающего списка выбрать название торгового центра и будут автоматически  появяться все магазины которые есть в нем.
RankRetailACMAPABCHEGBEEZEAGH
1Vodafonexxxxxx
2Bijou Brigittexxxxxx
3Douglasxxxxxx
4Nanu-Nanaxxxx
5McPaperxxxxxx
6o2 Germanyxxxxx
7Gamestopxxxxxx
8Deichmannxxxx
9Nordseexxxxx
10DMxxxxx
11Telekom/T-mobilexxxxxx
спасибо
07.09.2017 22:40:55
Спасибо большое.
Если бы мне поставили такую задачу, я не задумываясь бы начал писать макрос и циклом бы проходил массив.
Ваш вариант мне понравился
Спасибо
16.10.2017 00:41:22
Подскажите, а как результат поместить не в массив, а в одну ячейку?
Что бы все товары из заказа отображались в одной ячейке?
Без использования макросов.
Страницы: 1  2  3  
Наверх