Зміст
У посібнику показано, як використовувати функцію ПОИСК для копіювання даних з іншого аркуша або книги, пошуку на декількох аркушах, а також динамічного пошуку для повернення значень з різних аркушів у різні комірки.
При пошуку якоїсь інформації в Excel рідко буває так, що всі дані знаходяться на одному аркуші. Частіше доводиться шукати на декількох аркушах або навіть в різних книгах. Хороша новина полягає в тому, що Microsoft Excel надає більше одного способу зробити це, а погана новина полягає в тому, що всі способи трохи складніше, ніж стандартна формула СРЗНАЧ. Але, набравшись трохи терпіння, мирозберуться :)
Як вставити між двома аркушами
Для початку розглянемо найпростіший випадок - використання VLOOKUP для копіювання даних з іншого аркуша. Це дуже схоже на звичайну формулу VLOOKUP, яка виконує пошук на тому ж аркуші. Різниця полягає в тому, що ви включаєте ім'я аркуша в table_array аргумент, який вказує формулі, на якому аркуші знаходиться діапазон пошуку.
Загальна формула для VLOOKUP з іншого аркуша виглядає наступним чином:
VLOOKUP(lookup_value, Лист! Асортимент , col_index_num, [range_lookup])Для прикладу, наведемо показники продажів від Ян підпорядковуватися Резюме Для цього визначимо наступні аргументи:
- Lookup_values знаходяться в колонці А на Резюме і звернемося до першої комірки даних, а саме до комірки А2.
- Table_array це діапазон A2:B6 на аркуші Jan. Щоб звернутися до нього, слід додати до посилання на діапазон ім'я аркуша та знак оклику: Jan!$A$2:$B$6.
Зверніть увагу, що ми блокуємо діапазон абсолютними посиланнями на комірки, щоб він не змінювався при копіюванні формули в інші комірки.
Col_index_num дорівнює 2, тому що ми хочемо скопіювати значення зі стовпця B, який є 2-м стовпцем у масиві таблиці.
- Range_lookup має значення FALSE для пошуку точного збігу.
Склавши аргументи докупи, отримуємо таку формулу:
=VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)
Перетягніть формулу вниз по стовпчику і ви отримаєте такий результат:
Аналогічним чином можна переглянути дані з Лютий і Березень простирадла:
=VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)
=VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)
Поради та примітки:
- Якщо назва аркуша містить місця або неалфавітні символи воно повинно бути взяте в одинарні лапки, наприклад "Ян Сейлз"! $A$2:$B$6 Для отримання додаткової інформації див. статтю Як посилатися на інший аркуш в Excel.
- Замість того, щоб вводити ім'я аркуша безпосередньо у формулі, ви можете переключитися на аркуш пошуку і вибрати діапазон там. Excel автоматично вставить посилання з правильним синтаксисом, позбавивши вас від необхідності перевіряти ім'я та усувати несправності.
Виклик з іншої книги
Для переходу між двома робочими книгами вкажіть ім'я файлу в квадратних дужках, а потім ім'я аркуша і знак оклику.
Наприклад, для пошуку значення A2 в діапазоні A2:B6 на Ян аркуша в Звіти про продажі.xlsx використовуйте цю формулу:
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
Для більш детальної інформації, будь ласка, зверніться до розділу ВИКОРИСТАННЯ з іншої книги в Excel.
Перегляд на декількох аркушах з помилкою IFERROR
Коли потрібно шукати між більш ніж двома аркушами, найпростішим рішенням є використання VLOOKUP в поєднанні з IFERROR. Ідея полягає у вкладенні декількох функцій IFERROR для перевірки декількох робочих аркушів по черзі: якщо перший VLOOKUP не знаходить збігу на першому аркуші, пошук на наступному аркуші, і так далі.
IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Не знайдено "))Щоб побачити, як цей підхід працює на реальних даних, розглянемо наступний приклад. Нижче наведено Резюме таблицю, яку ми хочемо заповнити назвами позицій і сумами, знайшовши номер замовлення в Захід і Схід простирадла:
Спочатку ми збираємося витягнути елементи. Для цього ми даємо вказівку формулі VLOOKUP шукати номер замовлення в A2 на Схід і повертає значення зі стовпчика B (2-й стовпчик у table_array Якщо точного збігу не знайдено, то виконайте пошук в Захід Якщо обидва Vlookup не вдасться, поверніть "Не знайдено".
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Не знайдено"))
Щоб повернути суму, просто змініть номер індексу колонки на 3:
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Не знайдено"))
Порада: При необхідності можна вказати різні масиви таблиць для різних функцій VLOOKUP. У цьому прикладі обидва аркуші пошуку мають однакову кількість рядків (A2:C6), але ваші робочі аркуші можуть відрізнятися за розміром.
Vlookup в декількох книгах
Щоб виконати перехід між двома або більше книгами, візьміть назву книги в квадратні дужки і поставте її перед назвою аркуша. Наприклад, так можна виконати перехід між двома або більше книгами два різних файли ( Книга 1 і Книга 2 ) за єдиною формулою:
=IFERROR(VLOOKUP(A2, [Book1.xlsx]East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, [Book2.xlsx]West!$A$2:$C$6, 2, FALSE), "Не знайдено"))
Зробити номер індексу стовпця динамічним для перегляду декількох стовпців
У ситуації, коли потрібно повернути дані з декількох стовпців, внесення col_index_num Динаміка може заощадити вам час, але потрібно внести деякі корективи:
- Для col_index_num використовується функція COLUMNS, яка повертає кількість стовпців у заданому масиві: COLUMNS($A$1:B$1). (Координата рядка не має особливого значення, це може бути будь-який рядок).
- В рамках проекту lookup_value фіксує посилання на стовпець знаком $ ($A2), щоб воно залишалося фіксованим при копіюванні формули в інші стовпці.
В результаті ви отримуєте своєрідну динамічну формулу, яка витягує відповідні значення з різних стовпців, в залежності від того, в який стовпець копіюється формула:
=IFERROR(VLOOKUP($A2, East!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), IFERROR(VLOOKUP($A2, West!$A$2:$C$6, COLUMNS($A$1:B$1), FALSE), "Not found"))
При введенні в стовпець B, COLUMNS($A$1:B$1) отримує значення 2, вказуючи VLOOKUP повернути значення з 2-го стовпця в масиві таблиці.
При копіюванні в стовпець C (тобто ви перетягнули формулу з B2 в C2), B$1 змінюється на C$1, оскільки посилання на стовпець відносне. Отже, COLUMNS($A$1:C$1) отримує значення 3, що змушує VLOOKUP повертати значення з 3-го стовпця.
Ця формула чудово працює для 2-3 таблиць пошуку. Якщо їх більше, повторювані IFERROR стають занадто громіздкими. Наступний приклад демонструє дещо складніший, але набагато елегантніший підхід.
Перегляд декількох аркушів з непрямим відображенням
Ще один спосіб переходу між кількома аркушами в Excel - це використання комбінації функцій VLOOKUP і INDIRECT. Цей спосіб вимагає невеликої підготовки, але в підсумку ви отримаєте більш компактну формулу для переходу в будь-яку кількість електронних таблиць.
Загальна формула для Vlookup по аркушах виглядає наступним чином:
VLOOKUP( lookup_value , INDIRECT("'"&INDEX( Таблиці_пошуку , MATCH(1, --(COUNTIF(INDIRECT("'" & Таблиці_пошуку "'! діапазон_пошуку "), lookup_value )>0), 0)) & "'! table_array "), col_index_num , FALSE)Де:
- Таблиці_пошуку - іменований діапазон, що складається з імен аркушів пошуку.
- Lookup_value - значення для пошуку.
- Діапазон_пошуку - діапазон стовпців на аркушах пошуку, в якому слід шукати шукане значення.
- Table_array - діапазон даних в таблицях пошуку.
- Col_index_num - номер стовпця в масиві таблиці, з якого потрібно повернути значення.
Для того, щоб формула працювала коректно, будь ласка, зверніть увагу на наступні застереження:
- Це формула масиву, яку потрібно заповнити, натиснувши разом клавіші Ctrl + Shift + Enter.
- Всі аркуші повинні мати однаковий порядок стовпців .
- Оскільки ми використовуємо один табличний масив для всіх таблиць пошуку, вкажіть найбільший асортимент якщо ваші аркуші мають різну кількість рядків.
Як використовувати формулу для переходу по аркушах
Щоб переглянути декілька аркушів одночасно, виконайте такі дії:
- Запишіть всі назви аркушів пошуку десь у робочому зошиті і дайте назву цьому діапазону ( Таблиці_пошуку у нашому випадку).
- пошук значення A2 ( lookup_value )
- в діапазоні A2:A6 ( діапазон_пошуку ) на чотирьох робочих аркушах ( Схід , Північ , Південь і Захід ), та
- витягнути відповідні значення з колонки B, яка є колонкою 2 ( col_index_num ) в діапазоні даних A2:C6 ( table_array ).
З урахуванням наведених вище аргументів формула набуває такого вигляду:
=VLOOKUP($A2, INDIRECT("'"&INDEX(Аркуші_пошуку, MATCH(1, --(COUNTIF(INDIRECT("'"& Аркуші_пошуку&"'!$A$2:$A$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)
Зверніть увагу, що ми блокуємо обидва діапазони ($A$2:$A$6 і $A$2:$C$6) з абсолютними посиланнями на комірки.
В результаті ми отримали формулу для пошуку номера замовлення на 4 аркушах та отримання відповідної позиції. Якщо конкретний номер замовлення не знайдено, відображається помилка #N/A, як у рядку 14:
Щоб повернути суму, просто замініть 2 на 3 у полі col_index_num оскільки суми знаходяться в 3-му стовпчику табличного масиву:
=VLOOKUP($A2, INDIRECT("'"&INDEX(Аркуші_пошуку, MATCH(1, --(COUNTIF(INDIRECT("'" & Аркуші_пошуку & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE)
Якщо ви хочете замінити стандартне позначення помилки #N/A своїм текстом, оберніть формулу у функцію IFNA:
=IFNA(VLOOKUP($A2, INDIRECT("'"&INDEX(Аркуші_пошуку, MATCH(1, --(COUNTIF(INDIRECT("'" & Аркуші_пошуку & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE), "Not found")
Перегляд декількох аркушів між книгами
Ця загальна формула (або будь-яка її варіація) також може бути використана для перегляду декількох аркушів у інший робочий зошит Для цього об'єднайте ім'я книги всередині INDIRECT, як показано в наведеній нижче формулі:
=IFNA(VLOOKUP($A2, INDIRECT(""[Книга1.xlsx]" & INDEX(Аркуші_пошуку, MATCH(1, --(COUNTIF(INDIRECT(""[Книга1.xlsx]" & Аркуші_пошуку & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 2, FALSE), "Не знайдено")
Перехід між аркушами та повернення декількох стовпців
Якщо ви хочете отримати дані з декількох стовпців, натисніть кнопку формула багатоклітинного масиву Щоб створити таку формулу, задайте константу масиву для col_index_num аргумент.
У даному прикладі ми хочемо повернути назви позицій (стовпець B) та суми (стовпець C), які є 2-м та 3-м стовпцями масиву таблиці відповідно. Отже, шуканий масив має вигляд {2,3}.
=VLOOKUP($A2, INDIRECT("'"&INDEX(Аркуші_пошуку, MATCH(1, --(COUNTIF(INDIRECT("'"& Аркуші_пошуку &"'!$A$2:$C$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), {2,3}, FALSE)
Щоб правильно ввести формулу в декілька клітинок, потрібно зробити ось що:
- У першому рядку виділяємо всі клітинки, які потрібно заповнити (у нашому прикладі B2:C2).
- Введіть формулу і натисніть клавіші Ctrl + Shift + Enter. Це введе однакову формулу у вибрані клітинки, яка поверне різні значення в кожному стовпчику.
- Перетягніть формулу вниз до решти рядків.
Як працює ця формула
Щоб краще зрозуміти логіку, розкладемо цю базову формулу на окремі функції:
=VLOOKUP($A2, INDIRECT("'"&INDEX(Аркуші_пошуку, MATCH(1, --(COUNTIF(INDIRECT("'"& Аркуші_пошуку&"'!$A$2:$A$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)
Працюючи зсередини назовні, ось що робить формула:
Прямий і непрямий
У двох словах, INDIRECT будує посилання для всіх аркушів пошуку, а COUNTIF підраховує входження шуканого значення (A2) на кожному аркуші:
--(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)
Більш детально:
Спочатку ви об'єднуєте ім'я діапазону (Lookup_sheets) і посилання на діапазон ($A$2:$A$6), додаючи апострофи і знак оклику в потрібних місцях для створення зовнішнього посилання, і подаєте отриманий текстовий рядок у функцію INDIRECT для динамічного посилання на аркуші пошуку:
INDIRECT({"'Схід'!$A$2:$A$6"; "'Південь'!$A$2:$A$6"; "'Північ'!$A$2:$A$6"; "'Захід'!$A$2:$A$6"})
COUNTIF перевіряє кожну комірку в діапазоні A2:A6 на кожному аркуші пошуку зі значенням в A2 на основному аркуші і повертає кількість збігів для кожного аркуша. У нашому наборі даних номер замовлення в A2 (101) знаходиться в комірці Захід який є 4-м в іменованому діапазоні, тому COUNTIF повертає цей масив:
{0;0;0;1}
Далі кожен елемент вищенаведеного масиву порівнюється з 0:
--({0; 0; 0; 1}>0)
В результаті виходить масив значень TRUE (більше 0) і FALSE (дорівнює 0), які ви примушуєте до 1 і 0 за допомогою подвійного унарного оператора (--), і в результаті отримуєте наступний масив:
{0; 0; 0; 1}
Ця операція є додатковим запобіжним заходом для обробки ситуації, коли аркуш пошуку містить кілька входжень шуканого значення, в цьому випадку COUNTIF поверне кількість, більшу за 1, в той час як нам потрібні тільки 1 і 0 в остаточному масиві (через хвилину ви зрозумієте чому).
Після всіх цих перетворень наша формула виглядає наступним чином:
VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)
ІНДЕКС і МАТЧ
На цьому етапі в справу вступає класична комбінація INDEX MATCH:
INDEX(Lookup_sheets, MATCH(1, {0;0;0;0;1}, 0))
Функція МАТЧ, налаштована на точний збіг (0 в останньому аргументі), шукає значення 1 в масиві {0;0;0;1} і повертає його позицію, яка дорівнює 4:
INDEX(Lookup_sheets, 4)
Функція INDEX використовує в якості аргументу номера рядка (row_num) число, повернуте функцією MATCH, і повертає 4-е значення в іменованому діапазоні Таблиці_пошуку що є Захід .
Отже, формула далі зводиться до:
VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)
Прямий і непрямий
Функція INDIRECT обробляє текстовий рядок всередині себе:
INDIRECT("'"& "West"&"'!$A$2:$C$6")
І перетворює його в посилання, яке йде на table_array аргумент VLOOKUP:
VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)
Нарешті, ця сама стандартна формула VLOOKUP шукає значення A2 в першому стовпчику діапазону A2:C6 на Захід і повертає збіг з 2-го стовпчика. Все!
Динамічна VLOOKUP для повернення даних з декількох аркушів в різні комірки
Насамперед, визначимо, що саме означає слово "динамічний" у цьому контексті і чим ця формула відрізнятиметься від попередніх.
Якщо у вас є великі масиви даних в одному форматі, які розподілені по декількох електронних таблицях, вам може знадобитися витягти інформацію з різних аркушів в різні клітинки. Зображення нижче ілюструє цю концепцію:
На відміну від попередніх формул, які витягували значення з конкретного аркуша на основі унікального ідентифікатора, цього разу ми хочемо витягти значення з декількох аркушів одночасно.
Існує два варіанти вирішення цього завдання. В обох випадках потрібно виконати невелику підготовчу роботу і створити іменовані діапазони для комірок даних на кожному аркуші пошуку. Для цього прикладу ми визначили такі діапазони:
- East_Sales - A2:B6 на східному аркуші
- North_Sales - А2:В6 на північному аркуші
- South_Sales - A2:B6 на південному аркуші
- West_Sales - A2:B6 на західному аркуші
VLOOKUP і вкладені IF
Якщо у вас є достатня кількість аркушів для пошуку, ви можете використовувати вкладені функції IF, щоб вибрати аркуш на основі ключових слів у попередньо визначених комірках (комірки з B1 по D1 в нашому випадку).
З шуканим значенням в А2 формула виглядає наступним чином:
=VLOOKUP($A2, IF(B$1="схід", East_Sales, IF(B$1="північ", North_Sales, IF(B$1="південь", South_Sales, IF(B$1="захід", West_Sales)))), 2, FALSE)
У перекладі на англійську мову частина IF звучить так:
Якщо B1 дорівнює Схід шукайте в діапазоні з назвою East_Sales якщо B1 є Північ шукайте в діапазоні з назвою North_Sales якщо B1 є Південь шукайте в діапазоні з назвою South_Sales і якщо B1 є Захід шукайте в діапазоні з назвою West_Sales .
Діапазон, що повертається функцією IF, переходить до table_array VLOOKUP, яка витягує відповідне значення з 2-го стовпчика на відповідному аркуші.
Розумне використання змішаних посилань для шуканого значення ($A2 - абсолютний стовпець і відносний рядок) і логічного тесту IF (B$1 - відносний стовпець і абсолютний рядок) дозволяє копіювати формулу в інші комірки без будь-яких змін - Excel автоматично коригує посилання, виходячи з взаємного розташування рядка і стовпця.
Отже, вводимо формулу в B2, копіюємо її вправо і вниз на стільки стовпчиків і рядків, скільки потрібно, і отримуємо наступний результат:
НЕПРЯМИЙ ПОШУК
При роботі з багатьма аркушами кілька вкладених рівнів можуть зробити формулу занадто довгою і важкою для читання. Набагато кращий спосіб - створити динамічний діапазон перегляду за допомогою INDIRECT:
=VLOOKUP($A2, INDIRECT(B$1&"_Продажі"), 2, FALSE)
Тут ми об'єднуємо посилання на комірку, яка містить унікальну частину іменованого діапазону (B1) та загальну частину (_Продажі). Це створює текстовий рядок типу "Східні_продажі", який НЕПРЯМИМ способом перетворюється на ім'я діапазону, зрозуміле для Excel.
В результаті ви отримуєте компактну формулу, яка чудово працює на будь-якій кількості аркушів:
Ось так працює Vlookup між аркушами і файлами в Excel. Дякую за прочитання і сподіваюся побачити вас на нашому блозі наступного тижня!
Практичний посібник для завантаження
Приклади звіту на декількох аркушах (файл .xlsx)