Поиск значения в таблице (диапазоне, массиве) по значению в первом столбце таблицы с помощью метода VBA Excel WorksheetFunction.VLookup. Синтаксис, параметры, примеры.
WorksheetFunction.VLookup – это метод VBA Excel, который ищет значение в крайнем левом столбце таблицы (диапазона, двумерного массива) и возвращает значение ячейки (элемента массива), находящейся в указанном столбце той же строки. Метод соответствует функции рабочего листа =ВПР (вертикальный просмотр).
Синтаксис
Синтаксис метода WorksheetFunction.VLookup в VBA Excel:
WorksheetFunction.VLookup(Arg1, Arg2, Arg3, Arg4) |
Параметры
Описание параметров метода WorksheetFunction.VLookup:
Параметр | Описание |
---|---|
Arg1 (Lookup_value) | Обязательный параметр. Значение, которое необходимо найти в первом столбце таблицы. |
Arg2 (Table_array) | Обязательный параметр. Таблица с двумя или более столбцами данных. Используется ссылка на диапазон, имя диапазона или массив. |
Arg3 (Col_index_num) | Обязательный параметр. Номер столбца, значение из которого возвращается. |
Arg4 (Range_lookup) | Необязательный параметр. Логическое значение, указывающее, должен ли метод VLookup искать точное совпадение или приблизительное. |
Значения параметра Arg4 (Range_lookup), задающие точность сопоставления:
Значение | Точность сопоставления |
---|---|
True | Значение по умолчанию. Метод WorksheetFunction.VLookup находит точное или приблизительное совпадение Arg1 со значением в первом столбце. Если точное совпадение не найдено, используется самое большое значение, меньшее Arg1. Значения в первом столбце таблицы должны быть отсортированы по возрастанию. |
False | Метод WorksheetFunction.VLookup находит только точное совпадение. Сортировка значений первого столбца таблицы не требуется. Если точное совпадение не найдено, генерируется ошибка. |
Если значение параметра Arg1 является текстом, а Arg4=False, тогда в строке Arg1 можно использовать знаки подстановки (спецсимволы): знак вопроса (?) и звездочку (*). Знак вопроса заменяет один любой символ, а звездочка соответствует любой последовательности символов. Чтобы знак вопроса (?) и звездочка (*) обозначали сами себя, перед ними указывается тильда (~).
Примеры
Примеры обкатывались на следующей таблице:
Поиск значения в таблице
Sub Primer1() Dim x x = «Смартфон: « & WorksheetFunction.VLookup(7, Range(«A2:D11»), 2, False) MsgBox x End Sub |
Результат работы кода:
Поиск значения в массиве
Sub Primer2() Dim x, y x = Range(«A2:D11») y = «Смартфон: « & WorksheetFunction.VLookup(8, x, 2, False) & vbNewLine _ & «Разрешение экрана: « & WorksheetFunction.VLookup(8, x, 3, False) & vbNewLine _ & «Емкость аккумулятора: « & WorksheetFunction.VLookup(8, x, 4, False) & » мАч» MsgBox y End Sub |
Результат работы кода:
Да, здесь можно немного улучшить структуру кода, применив оператор With...End With
:
Sub Primer3() Dim x, y x = Range(«A2:D11») With WorksheetFunction y = «Смартфон: « & .VLookup(8, x, 2, False) & vbNewLine _ & «Разрешение экрана: « & .VLookup(8, x, 3, False) & vbNewLine _ & «Емкость аккумулятора: « & .VLookup(8, x, 4, False) & » мАч» End With MsgBox y End Sub |
Функция ВПР в Excel позволяет данные из одной таблицы переставить в соответствующие ячейки второй. Ее английское наименование – VLOOKUP.
Очень удобная и часто используемая. Т.к. сопоставить вручную диапазоны с десятками тысяч наименований проблематично.
Как пользоваться функцией ВПР в Excel
Допустим, на склад предприятия по производству тары и упаковки поступили материалы в определенном количестве.
Стоимость материалов – в прайс-листе. Это отдельная таблица.
Необходимо узнать стоимость материалов, поступивших на склад. Для этого нужно подставит цену из второй таблицы в первую. И посредством обычного умножения мы найдем искомое.
Алгоритм действий:
- Приведем первую таблицу в нужный нам вид. Добавим столбцы «Цена» и «Стоимость/Сумма». Установим денежный формат для новых ячеек.
- Выделяем первую ячейку в столбце «Цена». В нашем примере – D2. Вызываем «Мастер функций» с помощью кнопки «fx» (в начале строки формул) или нажав комбинацию горячих клавиш SHIFT+F3. В категории «Ссылки и массивы» находим функцию ВПР и жмем ОК. Данную функцию можно вызвать перейдя по закладке «Формулы» и выбрать из выпадающего списка «Ссылки и массивы».
- Откроется окно с аргументами функции. В поле «Искомое значение» — диапазон данных первого столбца из таблицы с количеством поступивших материалов. Это те значения, которые Excel должен найти во второй таблице.
- Следующий аргумент – «Таблица». Это наш прайс-лист. Ставим курсор в поле аргумента. Переходим на лист с ценами. Выделяем диапазон с наименованием материалов и ценами. Показываем, какие значения функция должна сопоставить.
- Чтобы Excel ссылался непосредственно на эти данные, ссылку нужно зафиксировать. Выделяем значение поля «Таблица» и нажимаем F4. Появляется значок $.
- В поле аргумента «Номер столбца» ставим цифру «2». Здесь находятся данные, которые нужно «подтянуть» в первую таблицу. «Интервальный просмотр» — ЛОЖЬ. Т.к. нам нужны точные, а не приблизительные значения.
Нажимаем ОК. А затем «размножаем» функцию по всему столбцу: цепляем мышью правый нижний угол и тянем вниз. Получаем необходимый результат.
Теперь найти стоимость материалов не составит труда: количество * цену.
Функция ВПР связала две таблицы. Если поменяется прайс, то и изменится стоимость поступивших на склад материалов (сегодня поступивших). Чтобы этого избежать, воспользуйтесь «Специальной вставкой».
- Выделяем столбец со вставленными ценами.
- Правая кнопка мыши – «Копировать».
- Не снимая выделения, правая кнопка мыши – «Специальная вставка».
- Поставить галочку напротив «Значения». ОК.
Формула в ячейках исчезнет. Останутся только значения.
Быстрое сравнение двух таблиц с помощью ВПР
Функция помогает сопоставить значения в огромных таблицах. Допустим, поменялся прайс. Нам нужно сравнить старые цены с новыми ценами.
- В старом прайсе делаем столбец «Новая цена».
- Выделяем первую ячейку и выбираем функцию ВПР. Задаем аргументы (см. выше). Для нашего примера: . Это значит, что нужно взять наименование материала из диапазона А2:А15, посмотреть его в «Новом прайсе» в столбце А. Затем взять данные из второго столбца нового прайса (новую цену) и подставить их в ячейку С2.
Данные, представленные таким образом, можно сопоставлять. Находить численную и процентную разницу.
Функция ВПР в Excel с несколькими условиями
До сих пор мы предлагали для анализа только одно условие – наименование материала. На практике же нередко требуется сравнить несколько диапазонов с данными и выбрать значение по 2, 3-м и т.д. критериям.
Таблица для примера:
Предположим, нам нужно найти, по какой цене привезли гофрированный картон от ОАО «Восток». Нужно задать два условия для поиска по наименованию материала и по поставщику.
Дело осложняется тем, что от одного поставщика поступает несколько наименований.
- Добавляем в таблицу крайний левый столбец (важно!), объединив «Поставщиков» и «Материалы».
- Таким же образом объединяем искомые критерии запроса:
- Теперь ставим курсор в нужном месте и задаем аргументы для функции: . Excel находит нужную цену.
Рассмотрим формулу детально:
- Что ищем.
- Где ищем.
- Какие данные берем.
Функция ВПР и выпадающий список
Допустим, какие-то данные у нас сделаны в виде раскрывающегося списка. В нашем примере – «Материалы». Необходимо настроить функцию так, чтобы при выборе наименования появлялась цена.
Сначала сделаем раскрывающийся список:
- Ставим курсор в ячейку Е8, где и будет этот список.
- Заходим на вкладку «Данные». Меню «Проверка данных».
- Выбираем тип данных – «Список». Источник – диапазон с наименованиями материалов.
- Когда нажмем ОК – сформируется выпадающий список.
Теперь нужно сделать так, чтобы при выборе определенного материала в графе цена появлялась соответствующая цифра. Ставим курсор в ячейку Е9 (где должна будет появляться цена).
- Открываем «Мастер функций» и выбираем ВПР.
- Первый аргумент – «Искомое значение» — ячейка с выпадающим списком. Таблица – диапазон с названиями материалов и ценами. Столбец, соответственно, 2. Функция приобрела следующий вид: .
- Нажимаем ВВОД и наслаждаемся результатом.
Изменяем материал – меняется цена:
Скачать пример функции ВПР в Excel
Так работает раскрывающийся список в Excel с функцией ВПР. Все происходит автоматически. В течение нескольких секунд. Все работает быстро и качественно. Нужно только разобраться с этой функцией.
0 / 0 / 0 Регистрация: 26.09.2016 Сообщений: 150 |
|
1 |
|
Аналоги или ускорение ВПР через макрос12.08.2017, 20:31. Показов 24510. Ответов 27
Есть лист, в который простейшим ВПР-ом подтягиваются данные из другого листа. Но…на листе оооочень большое количество строк (от 300 000 и далее), соответственно ВПР виснет часа на 4, а то и больше. Возникла мысль сделать все через макрос, но есть нюансы:так как раньше в макросах я не сталкивалась с такими большими данными, то ВПР подтягивала так как прописывалось в макрокодере(но здесь этот вариант явно не прокатит). Вопрос:чем можно заменить или как можно ускорить ВПР в макросе? Прошу помощи, так как нахожусь в растерянности и не понимаю куда именно надо обратить свое внимание.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
12.08.2017, 20:31 |
Ответы с готовыми решениями: ВПР или макрос? 25.05.2013 A 22334 Макрос с впр
27 |
kalbasiatka 414 / 262 / 82 Регистрация: 27.10.2012 Сообщений: 860 |
||||
12.08.2017, 20:50 |
2 |
|||
Не 30 минут, но всё же вариант
0 |
0 / 0 / 0 Регистрация: 26.09.2016 Сообщений: 150 |
|
12.08.2017, 21:24 [ТС] |
3 |
А можете подписать какая строка за что отвечает? Добавлено через 18 минут
0 |
kalbasiatka 414 / 262 / 82 Регистрация: 27.10.2012 Сообщений: 860 |
||||
12.08.2017, 22:10 |
4 |
|||
Есть какое-либо ограничение Регистр, лишние символы (пробелы например)
0 |
0 / 0 / 0 Регистрация: 26.09.2016 Сообщений: 150 |
|
12.08.2017, 22:23 [ТС] |
5 |
Спасибо, все заработало)))
0 |
Makroshka 0 / 0 / 0 Регистрация: 26.09.2016 Сообщений: 150 |
||||||||||
29.08.2017, 10:51 [ТС] |
6 |
|||||||||
Я создала для данного кода форму, чтобы он был более универсальным, но высвечивает ошибку при определенных условиях. Если значение для переменной Col2 равно 3,4 и т.д., то выделяет эту строку в коде
а именно
Я не понимаю почему так выходит. При том если указывать у той переменной значение 2, то все работает корректно. Может кто-нибудь объяснить на что возмущается код? Файл с кодом и формой во вложении. Вложения
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
29.08.2017, 11:14 |
7 |
1. по коду — ReDim Preserve время ворует, можно ведь сразу просто взять два столбца от диапазона.
0 |
Makroshka 0 / 0 / 0 Регистрация: 26.09.2016 Сообщений: 150 |
||||||||
30.08.2017, 11:26 [ТС] |
8 |
|||||||
2. по ошибке — архив скачать не могу, но думаю ошибка потому, что размер массива не «3,4 и т.д.» столбцов. 3,4 и т.д. это не диапазон,а номер столбца (по крайней мере по моей задумке). 1. по коду — ReDim Preserve время ворует, можно ведь сразу просто взять два столбца от диапазона. А как это будет выглядеть без ReDim (я ведь правильно понимаю, что это сброс значения переменной?)? Для понимания…код в форме выглядит следующим образом:
Добавлено через 23 часа 28 минут
Вместо 1 to 2, поставила 1 to 30
0 |
0 / 0 / 0 Регистрация: 06.08.2020 Сообщений: 1 |
|
11.08.2020, 12:21 |
9 |
Добрый день! форма получилась очень интересной но есть одна проблема, подскажите как к этому макросу добавить проверку на уже существующую запись?
0 |
779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
|
11.08.2020, 13:49 |
10 |
А я что-то смысл происходящего в форме не понимаю. Синтаксис ВПР:
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
11.08.2020, 13:49 |
11 |
Добрый день!
0 |
779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
|
11.08.2020, 15:03 |
12 |
В этом макросе Во. Есть человек, который понял
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
11.08.2020, 15:20 |
13 |
3 года прошло, думаете я помню? Да и не решал я там ничего… Я просто посмотрел последний код, что в посте 8
0 |
779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
|
11.08.2020, 15:22 |
14 |
Просто замысел в чём?
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
11.08.2020, 15:38 |
15 |
В коде нет никаких ВПР.
0 |
779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
|
11.08.2020, 15:42 |
16 |
Но каким-то образом ускоряют в диапазоне в 642644 * 2 ячеек
0 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
11.08.2020, 15:44 |
17 |
Ну если смотреть на коды (зачем смотреть файл, который просят ускорить?) — ускоряют словарём и массивами.
0 |
Ученик 87 / 69 / 16 Регистрация: 01.04.2020 Сообщений: 247 |
|
11.08.2020, 19:13 |
18 |
amd48, Hugo121, я извиняюсь что встреваю в вашу беседу. Здравствуйте. Но форма тупо сравнивает столбцы которые вы укажете на двух листах. И выводит то что вы укажете при совпадение этих двух столбцов на второй лист. ВПР там нет и удваиванние. Сорян если что. Любопытство взяло вверх.
1 |
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
11.08.2020, 19:16 |
19 |
MikeVol, не верю
0 |
Ученик 87 / 69 / 16 Регистрация: 01.04.2020 Сообщений: 247 |
|
11.08.2020, 19:18 |
20 |
Hugo121, ну вам гуру Экселя виднее, не спорю.
0 |
How to use the VLOOKUP function across multiple workbooks in Excel. This will create a link between the workbooks that allows you to get updated data from the source-data workbook, even when it is closed.
Sections:
Before you Begin
Vlookup Between Multiple Workbooks
Potential Issue
Notes
Before You Begin
Make sure that the data in the source-workbook is setup correctly for a vlookup.
The column used to find the lookup_value should be the left-most column in the source data.
Vlookup Between Multiple Workbooks
Open both workbooks, the one that will have the vlookup and the one that has the source-data from which you will return values.
- Go to the worksheet where you want to display the data using the Vlookup and start to enter the function.
- Select the cell that contains the value for the first argument, the lookup_value. (The lookup_value is what is used to find the values in the source-data and it should be contained in the left-most column of the source-data table.)
Once, you select the lookup_value, type a comma to go to the next argument. - The next argument is the table_array argument, and this is what is located in the other workbook.
Without typing anything or hitting any other button, navigate to the source-data workbook and click and drag the mouse over the table that contains your data.
Notice that the formula that we started entering on the original workbook has now appeared within the formula bar at the top of this one (if you do not see the vlookup formula appear at the top, go back to step 1 and start over).
While still on this screen, type a comma and move to the next argument; the rest of the formula will be completed while viewing the source-data workbook. - You will see the argument list for the vlookup function appear under the formula bar and you should now see the col_index_num argument in bold.
I want to get the value from the Quantity column, so I put a 3 for this argument, since the Quantity column is the third column in the source-data table.
Don’t get confused about finishing the formula on the source-data worksheet, this is just part of the process.
Don’t forget to type a comma to move to the last argument. - For the last argument, the range_lookup, we will use False so that only exact matches are returned; most of the time, this is what you want to use.
You are now done entering the function; you can either hit Enter or first input the closing parenthesis ) and then hit Enter.
Once you do this, you should be taken back to the first workbook, the one with the vlookup in it, and a value should be returned.
That’s it!
If you did not already enter a value for the lookup_value argument, cell A2 in the above example, then the vlookup will return an error by default; simply input a lookup_value to fix this.
Potential Issue
When you close the workbooks and open the one with the lookup formula, you might see some warnings. These warnings come about because the workbooks are now linked, which means that one pulls data from the other one.
In order to allow data to flow between these workbooks, you will have to click the button to enable the links when you see this warning.
Here is a sample warning that you might see:
And here is another one:
(Warnings don’t always appear so don’t get nervous if you don’t see one.)
Notes
Getting data from other workbooks is one of the most useful things that you can do in Excel and, as you can see, it is not that difficult to do. Once you have the necessary workbooks open, it is, basically, just like using formulas between worksheets in the same workbook.
Make sure to download the sample files for this tutorial so that you can work with the above examples.
Similar Content on TeachExcel
How to use Vlookup Across Multiple Worksheets in Excel
Tutorial: This tutorial shows you how to use the Vlookup function across multiple worksheets within …
Center Titles Across Multiple Cells in Excel
Tutorial:
How to center a title across multiple cells in Excel in order to make good looking titles…
Sum Values that Equal 1 of Many Conditions across Multiple Columns in Excel
Tutorial:
How to Sum values using an OR condition across multiple columns, including using OR with …
Combine Multiple Workbooks into One
Macro: This macro for Microsoft Excel allows you to combine multiple workbooks and worksheets int…
Combine Worksheets from Multiple Workbooks into One
: Excel macro that allows you to select multiple workbooks and have all of their worksheets …
Sum Values that Meet 1 of Multiple Conditions in Excel
Tutorial:
How to sum values that equal one of many potential criteria; this is basically summing wi…
Subscribe for Weekly Tutorials
BONUS: subscribe now to download our Top Tutorials Ebook!
Содержание
- Функция ВПР в Excel для чайников и не только
- Как пользоваться функцией ВПР в Excel
- Быстрое сравнение двух таблиц с помощью ВПР
- Функция ВПР в Excel с несколькими условиями
- Функция ВПР и выпадающий список
- ВПР с поиском по нескольким листам
Функция ВПР в Excel для чайников и не только
Функция ВПР в Excel позволяет данные из одной таблицы переставить в соответствующие ячейки второй. Ее английское наименование – VLOOKUP.
Очень удобная и часто используемая. Т.к. сопоставить вручную диапазоны с десятками тысяч наименований проблематично.
Как пользоваться функцией ВПР в Excel
Допустим, на склад предприятия по производству тары и упаковки поступили материалы в определенном количестве.
Стоимость материалов – в прайс-листе. Это отдельная таблица.
Необходимо узнать стоимость материалов, поступивших на склад. Для этого нужно подставит цену из второй таблицы в первую. И посредством обычного умножения мы найдем искомое.
- Приведем первую таблицу в нужный нам вид. Добавим столбцы «Цена» и «Стоимость/Сумма». Установим денежный формат для новых ячеек.
- Выделяем первую ячейку в столбце «Цена». В нашем примере – D2. Вызываем «Мастер функций» с помощью кнопки «fx» (в начале строки формул) или нажав комбинацию горячих клавиш SHIFT+F3. В категории «Ссылки и массивы» находим функцию ВПР и жмем ОК. Данную функцию можно вызвать перейдя по закладке «Формулы» и выбрать из выпадающего списка «Ссылки и массивы».
- Откроется окно с аргументами функции. В поле «Искомое значение» — диапазон данных первого столбца из таблицы с количеством поступивших материалов. Это те значения, которые Excel должен найти во второй таблице.
- Следующий аргумент – «Таблица». Это наш прайс-лист. Ставим курсор в поле аргумента. Переходим на лист с ценами. Выделяем диапазон с наименованием материалов и ценами. Показываем, какие значения функция должна сопоставить.
- Чтобы Excel ссылался непосредственно на эти данные, ссылку нужно зафиксировать. Выделяем значение поля «Таблица» и нажимаем F4. Появляется значок $.
- В поле аргумента «Номер столбца» ставим цифру «2». Здесь находятся данные, которые нужно «подтянуть» в первую таблицу. «Интервальный просмотр» — ЛОЖЬ. Т.к. нам нужны точные, а не приблизительные значения.
Нажимаем ОК. А затем «размножаем» функцию по всему столбцу: цепляем мышью правый нижний угол и тянем вниз. Получаем необходимый результат.
Теперь найти стоимость материалов не составит труда: количество * цену.
Функция ВПР связала две таблицы. Если поменяется прайс, то и изменится стоимость поступивших на склад материалов (сегодня поступивших). Чтобы этого избежать, воспользуйтесь «Специальной вставкой».
- Выделяем столбец со вставленными ценами.
- Правая кнопка мыши – «Копировать».
- Не снимая выделения, правая кнопка мыши – «Специальная вставка».
- Поставить галочку напротив «Значения». ОК.
Формула в ячейках исчезнет. Останутся только значения.
Быстрое сравнение двух таблиц с помощью ВПР
Функция помогает сопоставить значения в огромных таблицах. Допустим, поменялся прайс. Нам нужно сравнить старые цены с новыми ценами.
- В старом прайсе делаем столбец «Новая цена».
- Выделяем первую ячейку и выбираем функцию ВПР. Задаем аргументы (см. выше). Для нашего примера: . Это значит, что нужно взять наименование материала из диапазона А2:А15, посмотреть его в «Новом прайсе» в столбце А. Затем взять данные из второго столбца нового прайса (новую цену) и подставить их в ячейку С2.
Данные, представленные таким образом, можно сопоставлять. Находить численную и процентную разницу.
Функция ВПР в Excel с несколькими условиями
До сих пор мы предлагали для анализа только одно условие – наименование материала. На практике же нередко требуется сравнить несколько диапазонов с данными и выбрать значение по 2, 3-м и т.д. критериям.
Таблица для примера:
Предположим, нам нужно найти, по какой цене привезли гофрированный картон от ОАО «Восток». Нужно задать два условия для поиска по наименованию материала и по поставщику.
Дело осложняется тем, что от одного поставщика поступает несколько наименований.
- Добавляем в таблицу крайний левый столбец (важно!), объединив «Поставщиков» и «Материалы».
- Таким же образом объединяем искомые критерии запроса:
- Теперь ставим курсор в нужном месте и задаем аргументы для функции: . Excel находит нужную цену.
Рассмотрим формулу детально:
- Что ищем.
- Где ищем.
- Какие данные берем.
Функция ВПР и выпадающий список
Допустим, какие-то данные у нас сделаны в виде раскрывающегося списка. В нашем примере – «Материалы». Необходимо настроить функцию так, чтобы при выборе наименования появлялась цена.
Сначала сделаем раскрывающийся список:
- Ставим курсор в ячейку Е8, где и будет этот список.
- Заходим на вкладку «Данные». Меню «Проверка данных».
- Выбираем тип данных – «Список». Источник – диапазон с наименованиями материалов.
- Когда нажмем ОК – сформируется выпадающий список.
Теперь нужно сделать так, чтобы при выборе определенного материала в графе цена появлялась соответствующая цифра. Ставим курсор в ячейку Е9 (где должна будет появляться цена).
- Открываем «Мастер функций» и выбираем ВПР.
- Первый аргумент – «Искомое значение» — ячейка с выпадающим списком. Таблица – диапазон с названиями материалов и ценами. Столбец, соответственно, 2. Функция приобрела следующий вид: .
- Нажимаем ВВОД и наслаждаемся результатом.
Изменяем материал – меняется цена:
Так работает раскрывающийся список в Excel с функцией ВПР. Все происходит автоматически. В течение нескольких секунд. Все работает быстро и качественно. Нужно только разобраться с этой функцией.
Источник
ВПР с поиском по нескольким листам
ВПР по всем листам (43,0 KiB, 24 072 скачиваний)
Если необходимо найти какое-либо значение в большой таблице очень часто применяется функция ВПР. Но ВПР работает только с одной таблицей и нет никакой возможности средствами самой функции просмотреть искомое значение на нескольких листах. Если поиск необходимо осуществить только по двум листам, то можно схитрить:
=ВПР( A2 ;ЕСЛИ(ЕНД(ВПР( A2 ;Лист2!A1:B10;2;0));Лист3!A1:B10;Лист2!A1:B10);2;0)
начиная с версии Excel 2007 можно так же использовать функцию ЕСЛИОШИБКА (IFERROR) :
=ЕСЛИОШИБКА(ВПР( A2 ;Лист2!A1:B10;2;0);ВПР( A2 ;Лист3!A1:B10;2;0)
подробнее преимущества функции ЕСЛИОШИБКА (IFERROR) разбирались в этой статье: Как в ячейке с формулой вместо ошибки показать 0
А когда листов больше? Можно плодить ЕСЛИ (IF) и ЕСЛИОШИБКА (IFERROR) . Но это во-первых совсем не наглядно и во-вторых очень непрактично, т.к. при добавлении или удалении листов придется править всю мега-формулу. Да и при работе с количеством листов более 10 есть большой шанс, что длина формулы выйдет за пределы допустимой.
Есть небольшой прием, который поможет искать значение в указанных листах. Для начала необходимо создать на листе список листов книги, в которых искать значение. В приложенном к статье примере они записаны в диапазоне $E$2:$E$5 .
=ВПР( A2 ;ДВССЫЛ(«‘»&ИНДЕКС( $E$2:$E$5 ;ПОИСКПОЗ(ИСТИНА;СЧЁТЕСЛИ(ДВССЫЛ(«‘»& $E$2:$E$5 &»‘!A1:A50″); A2 )>0;0))&»‘!A:B»);2;0)
Формула вводится в ячейку как формула массива — т.е. сочетанием клавиш Ctrl + Shift + Enter . Это очень важное условие. Если формулу не вводить в ячейку как формулу массива, то необходимого результата не получить.
Попробую кратенько описать принцип работы данной формулы.
Перед чтением дальше советую скачать пример:
ВПР по всем листам (43,0 KiB, 24 072 скачиваний)
ДВССЫЛ нам нужна для преобразования текстового представления ссылок на листы в действительные. Подробно не буду останавливаться на принципе работы ДВССЫЛ, просто приведу этапы вычислений:
СЧЁТЕСЛИ(ДВССЫЛ(«‘»& $E$2:$E$5 &»‘!A1:A50»); A2 )
В результате вычисления данного блока у нас получается массив из количества повторений искомого значения на каждом из указанных листов: СЧЁТЕСЛИ(<1;0;0;0>; A2 ) . Поэтому следующий блок
ПОИСКПОЗ(ИСТИНА;СЧЁТЕСЛИ(ДВССЫЛ(«‘»& $E$2:$E$5 &»‘!A1:A50»); A2 )>;0;0)
работает именно с этим:
ПОИСКПОЗ(ИСТИНА;СЧЁТЕСЛИ(<1;0;0;0>; A2 )>0;0)
Читать подробнее про СЧЁТЕСЛИ
в результате чего мы получаем позицию имени листа в массиве имен листов $E$2:$E$5 , с помощью ИНДЕКС получаем имя листа и подставляем это имя уже к ДВССЫЛ (INDIRECT) , а она в ВПР:
=ВПР( A2 ;ДВССЫЛ(«‘»&ИНДЕКС(<«Астраханьоблгаз»:»Липецкоблгаз»:»Оренбургоблгаз»:»Ростовоблгаз»>;1)&»‘!A:B»);2;0) =>
=ВПР( A2 ;ДВССЫЛ(«‘Астраханьоблгаз’!A:B»);2;0) =>
=ВПР( A2 ;’Лист2′!A:B;2;0)
Что нам и требовалось. Теперь если в книгу будут добавлены еще листы, то необходимо будет всего лишь дописать их к диапазону $E$2:$E$5 и при необходимости этот диапазон расширить. Так же можно задать диапазон $E$2:$E$5 как динамический и тогда необходимость в правке формулы отпадет вовсе.
Используемые в формуле величины:
A2 — ссылка на ячейку с искомым значением. Т.е. указывается то значение, которое требуется найти на листах.
$E$2:$E$5 — диапазон с именами листов, в которых требуется осуществлять поиск указанного значения ( A2 ).
Диапазон «‘!A1:A50» — это диапазон, в котором СЧЁТЕСЛИ ищет совпадения. Поэтому указывается только один столбец данных. При необходимости следует расширить или изменить. Можно указать так же «‘!A:A» , но при этом следует учитывать, что указание целого столбца может привести к значительному увеличению времени выполнения функции. Поэтому имеет смысл просто задать диапазон с запасом, например «‘!A1:A10000» .
«‘!A:B» — диапазон для аргумента ВПР — Таблица. В первом столбце этого диапазона на каждом из указанных листов ищется указанное значение ( A2 ). При нахождении возвращается значение из указанного столбца. Читать подробнее про ВПР>>
В примере к статье так же можно посмотреть формулу, которая для каждого значения подставляет имя листа, в котором это значение было найдено.
ВПР по всем листам (43,0 KiB, 24 072 скачиваний)
Так же можно искать по нескольким листам разных книг , а не только по нескольким листам одной книги. Для этого необходимо будет в списке листов вместе с именами листов добавить имена книг в квадратных скобках: [Книга1.xlsb]Май
[Книга1.xlsb]Июнь
[Книга2.xlsb]Май
[Книга2.xlsb]Июнь
Перечисленные книги обязательно должны быть открыты
ВАЖНО! если в результате записи формулы получаете ошибку #ССЫЛКА! (#REF!) , то скорее всего файл, из которого получаете данные, сохранен в формате xlsx(xlsm и т.п.), который содержит более 1млн. строк. А файл с формулой в раннем формате xls. Чтобы ошибки не было сохраните файл с формулой тоже в новом формате(Сохранить как — Книга Excel (.xlsx)), закройте и откройте заново. Формула должна заработать, если записана правильно.
Либо укажите фиксированный диапазон для ВПР, с количеством строк не более 65536. Вместо «‘!A:B» должно получиться так: «‘!A1:B60000»
Решил добавить простенькую функцию пользователя(UDF) для тех, кому проще «общаться» с VBA, чем с формулами. Функция ищет указанное значение во всех листах книги, в которой записана(даже в скрытых):
Function VLookUpAllSheets(vCriteria As Variant, rTable As Range, lColNum As Long, Optional iPart As Integer = 1) As Variant Dim rFndRng As Range If iPart <> 1 Then iPart = 2 For i = 1 To Worksheets.Count If Sheets(i).Name <> Application.Caller.Parent.Name Then With Sheets(i) Set rFndRng = .Range(rTable.Address).Resize(, 1).Find(vCriteria, , xlValues, iPart) If Not rFndRng Is Nothing Then VLookUpAllSheets = rFndRng.Offset(, lColNum — 1).Value Exit For End If End With End If Next i End Function
Функция попроще, чем ВПР — последний аргумент(интервальный_просмотр) выполняет несколько иные, чем в ВПР функции. Хотя полагаю немногие его используют в классическом варианте.
rTable — указывается таблица для поиска значений(как в стандартной ВПР)
vCriteria — указывается ссылка на ячейку или текстовое значение для поиска
lColNum — указывается номер столбца в таблице rTable, значение из которого необходимо вернуть — может быть ссылкой на столбец — СТОЛБЕЦ().
iPart — указывается метод просмотра. Если не указан, либо указана цифра 1, то поиск осуществляется по полному совпадению с ячейкой. Но в таком варианте допускается применение подстановочных символов * и ?. Если указано значение, отличное от 1, то совпадение будет отбираться по части вхождения. Если в vCriteria указать «при», то совпадением будет считаться и слово «прибыль»(первый буквы совпадают) и «неприятный»(в середине встречается «при»). Но в этом случае знаки * и ? будут восприниматься «как есть». Может пригодиться, если в искомом тексте присутствуют символы звездочки и вопросительного знака и надо найти совпадения, учитывая эти символы.
Статья помогла? Поделись ссылкой с друзьями!
Источник