Excel макрос для впр по

Поиск значения в таблице (диапазоне, массиве) по значению в первом столбце таблицы с помощью метода 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

Допустим, на склад предприятия по производству тары и упаковки поступили материалы в определенном количестве.

Таблица материалов.

Стоимость материалов – в прайс-листе. Это отдельная таблица.

Прайс-лист.

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

Алгоритм действий:

  1. Приведем первую таблицу в нужный нам вид. Добавим столбцы «Цена» и «Стоимость/Сумма». Установим денежный формат для новых ячеек.
  2. Выделяем первую ячейку в столбце «Цена». В нашем примере – D2. Вызываем «Мастер функций» с помощью кнопки «fx» (в начале строки формул) или нажав комбинацию горячих клавиш SHIFT+F3. В категории «Ссылки и массивы» находим функцию ВПР и жмем ОК. Данную функцию можно вызвать перейдя по закладке «Формулы» и выбрать из выпадающего списка «Ссылки и массивы».
  3. Фызов функции ВПР.

  4. Откроется окно с аргументами функции. В поле «Искомое значение» — диапазон данных первого столбца из таблицы с количеством поступивших материалов. Это те значения, которые Excel должен найти во второй таблице.
  5. Аргументы функции.

  6. Следующий аргумент – «Таблица». Это наш прайс-лист. Ставим курсор в поле аргумента. Переходим на лист с ценами. Выделяем диапазон с наименованием материалов и ценами. Показываем, какие значения функция должна сопоставить.
  7. Аргумент Таблица.

  8. Чтобы Excel ссылался непосредственно на эти данные, ссылку нужно зафиксировать. Выделяем значение поля «Таблица» и нажимаем F4. Появляется значок $.
  9. Абсолютные ссылки.

  10. В поле аргумента «Номер столбца» ставим цифру «2». Здесь находятся данные, которые нужно «подтянуть» в первую таблицу. «Интервальный просмотр» — ЛОЖЬ. Т.к. нам нужны точные, а не приблизительные значения.

Заполнены все аргументы.

Нажимаем ОК. А затем «размножаем» функцию по всему столбцу: цепляем мышью правый нижний угол и тянем вниз. Получаем необходимый результат.

Результат использования функции ВПР.

Теперь найти стоимость материалов не составит труда: количество * цену.

Функция ВПР связала две таблицы. Если поменяется прайс, то и изменится стоимость поступивших на склад материалов (сегодня поступивших). Чтобы этого избежать, воспользуйтесь «Специальной вставкой».

  1. Выделяем столбец со вставленными ценами.
  2. Правая кнопка мыши – «Копировать».
  3. Не снимая выделения, правая кнопка мыши – «Специальная вставка».
  4. Поставить галочку напротив «Значения». ОК.

Специальная вставка.

Формула в ячейках исчезнет. Останутся только значения.



Быстрое сравнение двух таблиц с помощью ВПР

Функция помогает сопоставить значения в огромных таблицах. Допустим, поменялся прайс. Нам нужно сравнить старые цены с новыми ценами.

Новый прайс.

  1. В старом прайсе делаем столбец «Новая цена».
  2. Добавить колонку новая цена в стаырй прайс.

  3. Выделяем первую ячейку и выбираем функцию ВПР. Задаем аргументы (см. выше). Для нашего примера: . Это значит, что нужно взять наименование материала из диапазона А2:А15, посмотреть его в «Новом прайсе» в столбце А. Затем взять данные из второго столбца нового прайса (новую цену) и подставить их в ячейку С2.

Заполнение новых цен.

Данные, представленные таким образом, можно сопоставлять. Находить численную и процентную разницу.

Функция ВПР в Excel с несколькими условиями

До сих пор мы предлагали для анализа только одно условие – наименование материала. На практике же нередко требуется сравнить несколько диапазонов с данными и выбрать значение по 2, 3-м и т.д. критериям.

Таблица для примера:

Поставщики материалов.

Предположим, нам нужно найти, по какой цене привезли гофрированный картон от ОАО «Восток». Нужно задать два условия для поиска по наименованию материала и по поставщику.

Дело осложняется тем, что от одного поставщика поступает несколько наименований.

  1. Добавляем в таблицу крайний левый столбец (важно!), объединив «Поставщиков» и «Материалы».
  2. Объединение поставщиков и материалов.

  3. Таким же образом объединяем искомые критерии запроса:
  4. Объединяем искомые критерии.

  5. Теперь ставим курсор в нужном месте и задаем аргументы для функции: . Excel находит нужную цену.

Разбор формулы.

Рассмотрим формулу детально:

  1. Что ищем.
  2. Где ищем.
  3. Какие данные берем.

Функция ВПР и выпадающий список

Допустим, какие-то данные у нас сделаны в виде раскрывающегося списка. В нашем примере – «Материалы». Необходимо настроить функцию так, чтобы при выборе наименования появлялась цена.

Сначала сделаем раскрывающийся список:

  1. Ставим курсор в ячейку Е8, где и будет этот список.
  2. Заходим на вкладку «Данные». Меню «Проверка данных».
  3. Проверка данных.

  4. Выбираем тип данных – «Список». Источник – диапазон с наименованиями материалов.
  5. Параметры выпадающего списка.

  6. Когда нажмем ОК – сформируется выпадающий список.

Выпадающий список.

Теперь нужно сделать так, чтобы при выборе определенного материала в графе цена появлялась соответствующая цифра. Ставим курсор в ячейку Е9 (где должна будет появляться цена).

  1. Открываем «Мастер функций» и выбираем ВПР.
  2. Первый аргумент – «Искомое значение» — ячейка с выпадающим списком. Таблица – диапазон с названиями материалов и ценами. Столбец, соответственно, 2. Функция приобрела следующий вид: .
  3. Нажимаем ВВОД и наслаждаемся результатом.

Результат работы выпадающего списка.

Изменяем материал – меняется цена:

Связь цен с материалами.

Скачать пример функции ВПР в Excel

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

0 / 0 / 0

Регистрация: 26.09.2016

Сообщений: 150

1

Аналоги или ускорение ВПР через макрос

12.08.2017, 20:31. Показов 24510. Ответов 27


Студворк — интернет-сервис помощи студентам

Есть лист, в который простейшим ВПР-ом подтягиваются данные из другого листа. Но…на листе оооочень большое количество строк (от 300 000 и далее), соответственно ВПР виснет часа на 4, а то и больше. Возникла мысль сделать все через макрос, но есть нюансы:так как раньше в макросах я не сталкивалась с такими большими данными, то ВПР подтягивала так как прописывалось в макрокодере(но здесь этот вариант явно не прокатит). Вопрос:чем можно заменить или как можно ускорить ВПР в макросе?
P.S. ВПР выглядит следующим образом =ВПР(A1;ОиО!$A$1:$B$642644;2;0). Причем данный ВПР надо растянуть до конца таблицы и количество строк на листе ОиО тоже меняется (то есть тут скорее всего надо задавать диапазон переменной). И главным приоритетом является ускорение процесса (ну хотя бы до 30 минут)

Прошу помощи, так как нахожусь в растерянности и не понимаю куда именно надо обратить свое внимание.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

12.08.2017, 20:31

Ответы с готовыми решениями:

ВПР или макрос?
Уважаемые, добрый день!

25.05.2013 A 22334
25.05.2013 E 232345
25.05.2013 H 454545…

Макрос с впр
Добрый день! Вновь надеюсь на вашу помощь!
Имеется таблица с данными "РТП 1" из нее нужно удалить…

Макрос вместо ВПР
Добрый день, уважаемые форумчане!
Подскажите, пожалуйста, макрос, который мог бы заменить формулу…

Макрос впр по 3 столбцам
Здравствуйте!!!!
— Помогите преобразовать макрос впр с рекордера в нормальный вид.
— вместо 0 и…

27

kalbasiatka

414 / 262 / 82

Регистрация: 27.10.2012

Сообщений: 860

12.08.2017, 20:50

2

Не 30 минут, но всё же вариант

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub uuu()
    Dim a()
    Dim i&
    Dim sd As Object
'---------------------
    a = Sheets(1).UsedRange.Value
    Set sd = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(a)
        sd.Item(a(i, 1)) = a(i, 2)
    Next
    a = Sheets(2).UsedRange.Value
    ReDim Preserve a(1 To UBound(a), 1 To 2)
    For i = 1 To UBound(a)
        If sd.Exists(a(i, 1)) Then a(i, 2) = sd.Item(a(i, 1))
    Next
    Sheets(2).Cells(1, 1).Resize(UBound(a), UBound(a, 2)) = a
    Beep
    MsgBox "Готово!"
End Sub



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

Цитата
Сообщение от Makroshka
Посмотреть сообщение

Есть какое-либо ограничение

Регистр, лишние символы (пробелы например)
Не смотрим на регистр и убираем пробелы по краям, чуть медленнее.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub uuu()
    Dim a()
    Dim i&
    Dim sd As Object
    Dim k
'---------------------
    a = Sheets(1).UsedRange.Value
    Set sd = CreateObject("Scripting.Dictionary")
    sd.CompareMode = vbTextCompare
    For i = 1 To UBound(a)
        k = Trim(a(i, 1))
        sd.Item(k) = a(i, 2)
    Next
    a = Sheets(2).UsedRange.Value
    ReDim Preserve a(1 To UBound(a), 1 To 2)
    For i = 1 To UBound(a)
        k = Trim(a(i, 1))
        If sd.Exists(k) Then a(i, 2) = sd.Item(k)
    Next
    Sheets(2).Cells(1, 1).Resize(UBound(a), UBound(a, 2)) = a
    Beep
    MsgBox "Готово!"
End Sub



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 и т.д., то выделяет эту строку в коде

Visual Basic
1
If sd.Exists(k) Then a(i, Col2) = sd.Item(k)

а именно

Visual Basic
1
a(i, Col2) = sd.Item(k)

Я не понимаю почему так выходит. При том если указывать у той переменной значение 2, то все работает корректно. Может кто-нибудь объяснить на что возмущается код?

Файл с кодом и формой во вложении.

Вложения

Тип файла: 7z Пример.7z (17.2 Кб, 83 просмотров)



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

29.08.2017, 11:14

7

1. по коду — ReDim Preserve время ворует, можно ведь сразу просто взять два столбца от диапазона.
2. по ошибке — архив скачать не могу, но думаю ошибка потому, что размер массива не «3,4 и т.д.» столбцов.



0



Makroshka

0 / 0 / 0

Регистрация: 26.09.2016

Сообщений: 150

30.08.2017, 11:26

 [ТС]

8

2. по ошибке — архив скачать не могу, но думаю ошибка потому, что размер массива не «3,4 и т.д.» столбцов.

3,4 и т.д. это не диапазон,а номер столбца (по крайней мере по моей задумке).

1. по коду — ReDim Preserve время ворует, можно ведь сразу просто взять два столбца от диапазона.

А как это будет выглядеть без ReDim (я ведь правильно понимаю, что это сброс значения переменной?)?

Для понимания…код в форме выглядит следующим образом:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Private Sub lsbTypes1_Change()
 
End Sub
 
Private Sub UserForm_Initialize()
    Dim Sheet As Object
    For Each Sheet In ActiveWorkbook.Sheets
        Me.lsbTypes1.AddItem (Sheet.Name)
        Me.lsbTypes2.AddItem (Sheet.Name)
    Next
End Sub
 
Private Sub CommandButton1_Click()
Dim a()
    Dim i&
    Dim sd As Object
    Dim k
    Dim Col1
    Dim Col2
    Dim Col3
    Dim Col4
    Dim Sh1
    Dim Sh2
'---------------------
 
    Col1 = txtInput1.Text
    Col2 = txtInput2.Text
    Col3 = txtInput3.Text
    Col4 = txtInput4.Text
    Sh1 = lsbTypes1.Text
    Sh2 = lsbTypes2.Text
    
    a = Sheets(Sh2).UsedRange.Value
    Set sd = CreateObject("Scripting.Dictionary")
    sd.CompareMode = vbTextCompare
    For i = 1 To UBound(a)
        k = Trim(a(i, Col3))
        sd.Item(k) = Col4
    Next
    a = Sheets(Sh1).UsedRange.Value
    ReDim Preserve a(1 To UBound(a), 1 To 2)
    For i = 1 To UBound(a)
        k = Trim(a(i, Col1))
        If sd.Exists(k) Then a(i, Col2) = sd.Item(k)
    Next
    Sheets(Sh1).Cells(1, 1).Resize(UBound(a), UBound(a, 2)) = a
    Beep
    MsgBox "Ãîòîâî!"
End Sub

Добавлено через 23 часа 28 минут
Всем спасибо, разобралась почему макрос показывал ошибку…
В этой строке

Visual Basic
1
ReDim Preserve a(1 To UBound(a), 1 To 2)

Вместо 1 to 2, поставила 1 to 30



0



0 / 0 / 0

Регистрация: 06.08.2020

Сообщений: 1

11.08.2020, 12:21

9

Добрый день!

форма получилась очень интересной, для решения моей проблемы самое то. у меня файлы по 600К+ записей.
скорость моментальная по сравнению с обычным ВПР

но есть одна проблема, подскажите как к этому макросу добавить проверку на уже существующую запись?
т.е. в списке по которому ищем могут попадаться дублирующие значения и при проходе он удваивает значения (если значение которое ищем числовое)



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

Цитата
Сообщение от Hugo121
Посмотреть сообщение

В этом макросе

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



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.

6f2a816a2f1bf1fc47a4c91beb3786a9.png

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.

  1. Go to the worksheet where you want to display the data using the Vlookup and start to enter the function.
    53b7b58347cfa4f458005b8a449b4f26.png
  2. 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.)
    93c0e22c66134c707112526c5b2808fe.png
    Once, you select the lookup_value, type a comma to go to the next argument.
  3. 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.
    bea22507307ef08f3fdbdb3bf6fd3cae.png
    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.
  4. 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.
    39dece87e2f10e43e0d21a62a4a3e688.jpg
    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.
  5. 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.
    ca14107f2506247799c9ac56630d48a9.png
    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.
    583f4ce619ffd1e59806559075ac30ae.png
    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:

fb4906458b21490be4263bb5fc6b4397.png

And here is another one:

40ac7936920b5c9ae50fd5c7f6b836d4.png

(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!

Содержание

  1. Функция ВПР в Excel для чайников и не только
  2. Как пользоваться функцией ВПР в Excel
  3. Быстрое сравнение двух таблиц с помощью ВПР
  4. Функция ВПР в Excel с несколькими условиями
  5. Функция ВПР и выпадающий список
  6. ВПР с поиском по нескольким листам

Функция ВПР в Excel для чайников и не только

Функция ВПР в Excel позволяет данные из одной таблицы переставить в соответствующие ячейки второй. Ее английское наименование – VLOOKUP.

Очень удобная и часто используемая. Т.к. сопоставить вручную диапазоны с десятками тысяч наименований проблематично.

Как пользоваться функцией ВПР в Excel

Допустим, на склад предприятия по производству тары и упаковки поступили материалы в определенном количестве.

Стоимость материалов – в прайс-листе. Это отдельная таблица.

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

  1. Приведем первую таблицу в нужный нам вид. Добавим столбцы «Цена» и «Стоимость/Сумма». Установим денежный формат для новых ячеек.
  2. Выделяем первую ячейку в столбце «Цена». В нашем примере – D2. Вызываем «Мастер функций» с помощью кнопки «fx» (в начале строки формул) или нажав комбинацию горячих клавиш SHIFT+F3. В категории «Ссылки и массивы» находим функцию ВПР и жмем ОК. Данную функцию можно вызвать перейдя по закладке «Формулы» и выбрать из выпадающего списка «Ссылки и массивы».
  3. Откроется окно с аргументами функции. В поле «Искомое значение» — диапазон данных первого столбца из таблицы с количеством поступивших материалов. Это те значения, которые Excel должен найти во второй таблице.
  4. Следующий аргумент – «Таблица». Это наш прайс-лист. Ставим курсор в поле аргумента. Переходим на лист с ценами. Выделяем диапазон с наименованием материалов и ценами. Показываем, какие значения функция должна сопоставить.
  5. Чтобы Excel ссылался непосредственно на эти данные, ссылку нужно зафиксировать. Выделяем значение поля «Таблица» и нажимаем F4. Появляется значок $.
  6. В поле аргумента «Номер столбца» ставим цифру «2». Здесь находятся данные, которые нужно «подтянуть» в первую таблицу. «Интервальный просмотр» — ЛОЖЬ. Т.к. нам нужны точные, а не приблизительные значения.

Нажимаем ОК. А затем «размножаем» функцию по всему столбцу: цепляем мышью правый нижний угол и тянем вниз. Получаем необходимый результат.

Теперь найти стоимость материалов не составит труда: количество * цену.

Функция ВПР связала две таблицы. Если поменяется прайс, то и изменится стоимость поступивших на склад материалов (сегодня поступивших). Чтобы этого избежать, воспользуйтесь «Специальной вставкой».

  1. Выделяем столбец со вставленными ценами.
  2. Правая кнопка мыши – «Копировать».
  3. Не снимая выделения, правая кнопка мыши – «Специальная вставка».
  4. Поставить галочку напротив «Значения». ОК.

Формула в ячейках исчезнет. Останутся только значения.

Быстрое сравнение двух таблиц с помощью ВПР

Функция помогает сопоставить значения в огромных таблицах. Допустим, поменялся прайс. Нам нужно сравнить старые цены с новыми ценами.

  1. В старом прайсе делаем столбец «Новая цена».
  2. Выделяем первую ячейку и выбираем функцию ВПР. Задаем аргументы (см. выше). Для нашего примера: . Это значит, что нужно взять наименование материала из диапазона А2:А15, посмотреть его в «Новом прайсе» в столбце А. Затем взять данные из второго столбца нового прайса (новую цену) и подставить их в ячейку С2.

Данные, представленные таким образом, можно сопоставлять. Находить численную и процентную разницу.

Функция ВПР в Excel с несколькими условиями

До сих пор мы предлагали для анализа только одно условие – наименование материала. На практике же нередко требуется сравнить несколько диапазонов с данными и выбрать значение по 2, 3-м и т.д. критериям.

Таблица для примера:

Предположим, нам нужно найти, по какой цене привезли гофрированный картон от ОАО «Восток». Нужно задать два условия для поиска по наименованию материала и по поставщику.

Дело осложняется тем, что от одного поставщика поступает несколько наименований.

  1. Добавляем в таблицу крайний левый столбец (важно!), объединив «Поставщиков» и «Материалы».
  2. Таким же образом объединяем искомые критерии запроса:
  3. Теперь ставим курсор в нужном месте и задаем аргументы для функции: . Excel находит нужную цену.

Рассмотрим формулу детально:

  1. Что ищем.
  2. Где ищем.
  3. Какие данные берем.

Функция ВПР и выпадающий список

Допустим, какие-то данные у нас сделаны в виде раскрывающегося списка. В нашем примере – «Материалы». Необходимо настроить функцию так, чтобы при выборе наименования появлялась цена.

Сначала сделаем раскрывающийся список:

  1. Ставим курсор в ячейку Е8, где и будет этот список.
  2. Заходим на вкладку «Данные». Меню «Проверка данных».
  3. Выбираем тип данных – «Список». Источник – диапазон с наименованиями материалов.
  4. Когда нажмем ОК – сформируется выпадающий список.

Теперь нужно сделать так, чтобы при выборе определенного материала в графе цена появлялась соответствующая цифра. Ставим курсор в ячейку Е9 (где должна будет появляться цена).

  1. Открываем «Мастер функций» и выбираем ВПР.
  2. Первый аргумент – «Искомое значение» — ячейка с выпадающим списком. Таблица – диапазон с названиями материалов и ценами. Столбец, соответственно, 2. Функция приобрела следующий вид: .
  3. Нажимаем ВВОД и наслаждаемся результатом.

Изменяем материал – меняется цена:

Так работает раскрывающийся список в 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 указать «при», то совпадением будет считаться и слово «прибыль»(первый буквы совпадают) и «неприятный»(в середине встречается «при»). Но в этом случае знаки * и ? будут восприниматься «как есть». Может пригодиться, если в искомом тексте присутствуют символы звездочки и вопросительного знака и надо найти совпадения, учитывая эти символы.

Статья помогла? Поделись ссылкой с друзьями!

Источник

Понравилась статья? Поделить с друзьями:
  • Excel макрос длина строки
  • Excel макрос диапазон чисел
  • Excel макрос диапазон строк
  • Excel макрос диалоговое окно с выбором
  • Excel макрос диалоговое окно да нет