VLOOKUP в няколко листа в Excel с примери

  • Споделя Това
Michael Brown

В урока е показано как да използвате функцията VLOOKUP за копиране на данни от друг работен лист или работна книга, Vlookup в няколко листа и динамично търсене за връщане на стойности от различни листове в различни клетки.

Когато търсите някаква информация в Excel, рядко се случва всички данни да са на един и същи лист. По-често се налага да търсите в няколко листа или дори в различни работни книги. Добрата новина е, че Microsoft Excel предоставя повече от един начин да направите това, а лошата е, че всички начини са малко по-сложни от стандартната формула VLOOKUP. Но само с малко търпение можем даще ги разбера :)

    Как да извършите VLOOKUP между два листа

    За начало нека разгледаме най-простия случай - използването на VLOOKUP за копиране на данни от друг работен лист. Това е много подобно на обикновена формула VLOOKUP, която търси в същия работен лист. Разликата е, че включвате името на листа в table_array за да укажете на формулата в кой работен лист се намира диапазонът за търсене.

    Общата формула за VLOOKUP от друг лист е следната:

    VLOOKUP(lookup_value, Лист!диапазон , col_index_num, [range_lookup])

    Като пример, нека изтеглим данните за продажбите от Ян да докладва на Резюме За тази цел определяме следните аргументи:

    • Lookup_values са в колона А на Резюме и се позоваваме на първата клетка за данни, която е A2.
    • Таблица_масив Това е диапазонът A2:B6 на лист Jan. За да се обърнете към него, въведете префикс на референтния диапазон с името на листа, последвано от възклицателен знак: Jan!$A$2:$B$6.

      Обърнете внимание, че заключваме диапазона с абсолютни препратки към клетките, за да предотвратим промяната му при копиране на формулата в други клетки.

      Col_index_num е 2, защото искаме да копираме стойност от колона B, която е втората колона в масива на таблицата.

    • Range_lookup се задава FALSE, за да се търси точно съвпадение.

    Като съберем аргументите, получаваме следната формула:

    =VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)

    Плъзнете формулата надолу по колоната и ще получите този резултат:

    По подобен начин можете да прегледате данни от Feb и Мар листове:

    =VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)

    =VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)

    Съвети и бележки:

    • Ако името на листа съдържа пространства или неалфабетни знаци , то трябва да бъде оградено с единични кавички, като 'Jan Sales'!$A$2:$B$6 . За повече информация вижте Как да се позовавате на друг лист в Excel.
    • Вместо да въвеждате името на листа директно във формулата, можете да преминете към работния лист за търсене и да изберете диапазона там. Excel автоматично ще вмъкне препратка с правилния синтаксис, като ви спести труда да проверявате името и да отстранявате проблеми.

    Vlookup от друга работна книга

    За да направите VLOOKUP между две работни книги, включете името на файла в квадратни скоби, последвано от името на листа и възклицателен знак.

    Например, за да търсите стойност A2 в диапазона A2:B6 на Ян лист в Sales_reports.xlsx работна книга, използвайте тази формула:

    =VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)

    За повече информация вижте VLOOKUP от друга работна книга в Excel.

    Vlookup в няколко листа с IFERROR

    Когато трябва да търсите между повече от два листа, най-лесното решение е да използвате VLOOKUP в комбинация с IFERROR. Идеята е да вложите няколко функции IFERROR, за да проверите няколко работни листа един по един: ако първият VLOOKUP не намери съвпадение в първия лист, търсете в следващия лист и т.н.

    IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Не е намерен "))

    За да видите как този подход работи върху данни от реалния живот, нека разгледаме следния пример. Резюме която искаме да попълним с имената на артикулите и сумите, като потърсим номера на поръчката в West и Изток листове:

    Първо, ще изтеглим елементите. За тази цел инструктираме формулата VLOOKUP да търси номера на поръчката в A2 на Изток и да върнете стойността от колона B (2-ра колона в table_array A2:C6). Ако не бъде намерено точно съвпадение, търсете в West лист. Ако и двете Vlookups не успеят, връща се "Not found".

    =IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Not found")

    За да върнете сумата, просто променете номера на индекса на колоната на 3:

    =IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Not found")

    Съвет. Ако е необходимо, можете да зададете различни масиви от таблици за различните функции VLOOKUP. В този пример и двата листа за търсене имат еднакъв брой редове (A2:C6), но вашите работни листове може да са с различен размер.

    Vlookup в няколко работни книги

    За да направите Vlookup между две или повече работни книги, оградете името на работната книга в квадратни скоби и го поставете преди името на листа. Например, ето как можете да направите 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), "Не е намерен")

    Направете номера на индекса на колоната динамичен за Vlookup няколко колони

    В случаите, когато трябва да върнете данни от няколко колони, направете 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 да върне стойност от втората колона в масива на таблицата.

    Когато се копира в колона C (т.е. преместили сте формулата от B2 в C2), B$1 се променя на C$1, тъй като препратката към колоната е относителна. Следователно COLUMNS($A$1:C$1) се оценява на 3, което принуждава VLOOKUP да върне стойност от третата колона.

    Тази формула работи чудесно за 2-3 листа за търсене. Ако имате повече, повтарящите се IFERROR стават твърде тромави. Следващият пример демонстрира малко по-сложен, но много по-елегантен подход.

    Vlookup няколко листа с INDIRECT

    Още един начин за Vlookup между няколко листа в Excel е да използвате комбинация от функциите VLOOKUP и INDIRECT. Този метод изисква малко подготовка, но в крайна сметка ще имате по-компактна формула за Vlookup в произволен брой електронни таблици.

    Общата формула за Vlookup между листове е следната:

    VLOOKUP( lookup_value , INDIRECT("'"&INDEX( Lookup_sheets , MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & "'! lookup_range "), lookup_value )>0), 0)) & "'! table_array "), col_index_num , FALSE)

    Къде:

    • Lookup_sheets - именуван диапазон, състоящ се от имената на листа за търсене.
    • Lookup_value - стойността, която се търси.
    • Lookup_range - обхвата на колоната в листата за търсене, в който да се търси стойността на търсенето.
    • Таблица_масив - обхвата на данните в листовете за търсене.
    • Col_index_num - номерът на колоната в масива на таблицата, от която да се върне стойност.

    За да работи формулата правилно, моля, имайте предвид следните забележки:

    • Това е формула за масив, която трябва да се попълни, като се натиснат едновременно клавишите Ctrl + Shift + Enter.
    • Всички листове трябва да имат същия ред на колоните .
    • Тъй като използваме един масив от таблици за всички листове за търсене, посочете най-голям обхват ако листовете ви имат различен брой редове.

    Как да използвате формулата за Vlookup в различни листове

    За да разгледате няколко листа едновременно, изпълнете следните стъпки:

    1. Запишете имената на всички листове за търсене някъде в работната си книга и дайте име на този диапазон ( Lookup_sheets в нашия случай).

  • Коригирайте общата формула за вашите данни. В този пример ще бъдем:
    • търсене на стойност A2 ( lookup_value )
    • в диапазона A2:A6 ( lookup_range ) в четири работни листа ( Изток , Северна , Южна и West ), и
    • извличате съвпадащите стойности от колона B, която е колона 2 ( col_index_num ) в диапазона от данни A2:C6 ( table_array ).

    С горните аргументи формулата придобива следния вид:

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets&"'!$A$2:$A$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)

    Обърнете внимание, че заключваме и двата диапазона ($A$2:$A$6 и $A$2:$C$6) с абсолютни препратки към клетките.

  • Въведете формулата в най-горната клетка (B2 в този пример) и натиснете Ctrl + Shift + Enter, за да я завършите.
  • Щракнете два пъти върху дръжката за запълване или я плъзнете, за да копирате формулата надолу по колоната.
  • В резултат на това получихме формулата за търсене на номера на поръчката в 4 листа и извличане на съответния елемент. Ако не бъде намерен конкретен номер на поръчка, се извежда грешка #N/A, както в ред 14:

    За да върнете сумата, просто заменете 2 с 3 в col_index_num аргумент, тъй като сумите са в третата колона на масива на таблицата:

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE)

    Ако желаете да замените стандартния запис за грешка #N/A със собствен текст, вкарайте формулата във функцията IFNA:

    =IFNA(VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 3, FALSE), "Not found")

    Vlookup няколко листа между работни книги

    Тази обща формула (или нейна разновидност) може да се използва и за Vlookup на няколко листа в различна работна книга За целта конкатенирайте името на работната книга в INDIRECT, както е показано във формулата по-долу:

    =IFNA(VLOOKUP($A2, INDIRECT("'[Book1.xlsx]" & INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'[Book1.xlsx]" & Lookup_sheets & "'!$A$2:$A$6"), $A2)>0), 0)) & "'!$A$2:$C$6"), 2, FALSE), "Not found")

    Vlookup между листове и връщане на няколко колони

    Ако искате да извлечете данни от няколко колони, можете да формула за многоклетъчен масив За да създадете такава формула, въведете масивна константа за col_index_num аргумент.

    В този пример искаме да върнем имената на артикулите (колона B) и сумите (колона C), които са съответно втората и третата колона в масива на таблицата. Така че необходимият масив е {2,3}.

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets &"'!$A$2:$C$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), {2,3}, FALSE)

    За да въведете правилно формулата в няколко клетки, трябва да направите следното:

    • В първия ред изберете всички клетки, които трябва да бъдат попълнени (B2:C2 в нашия пример).
    • Въведете формулата и натиснете Ctrl + Shift + Enter . По този начин в избраните клетки се въвежда една и съща формула, която ще върне различна стойност във всяка колона.
    • Плъзнете надолу формулата към останалите редове.

    Как работи тази формула

    За да разберем по-добре логиката, нека разделим тази основна формула на отделните функции:

    =VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, --(COUNTIF(INDIRECT("'"& Lookup_sheets&"'!$A$2:$A$6"), $A2)>0), 0)) &"'!$A$2:$C$6"), 2, FALSE)

    Работейки отвътре навън, ето какво прави формулата:

    COUNTIF и INDIRECT

    Накратко, INDIRECT изгражда препратките за всички листове за търсене, а COUNTIF преброява срещите на стойността за търсене (A2) във всеки лист:

    --(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)

    По-подробно:

    Първо, конкатенирате името на диапазона (Lookup_sheets) и референцията на диапазона ($A$2:$A$6), като добавяте апострофи и възклицател на правилните места, за да направите външна референция, и подавате получения текстов низ на функцията INDIRECT, за да направи динамична референция към листовете за търсене:

    INDIRECT({"'East'!$A$2:$A$6"; "'South'!$A$2:$A$6"; "'North'!$A$2:$A$6"; "'West'!$A$2:$A$6"})

    COUNTIF проверява всяка клетка в диапазона A2:A6 на всеки лист за търсене спрямо стойността в A2 на основния лист и връща броя на съвпаденията за всеки лист. В нашия набор от данни номерът на поръчката в A2 (101) се намира в West лист, който е 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 MATCH:

    INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))

    Функцията MATCH, конфигурирана за точно съвпадение (0 в последния аргумент), търси стойността 1 в масива {0;0;0;1} и връща нейната позиция, която е 4:

    INDEX(Lookup_sheets, 4)

    Функцията INDEX използва числото, върнато от MATCH, като аргумент за номера на реда (row_num) и връща 4-тата стойност в посочения диапазон. Lookup_sheets , което е West .

    Така формулата се свежда до:

    VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)

    VLOOKUP и INDIRECT

    Функцията INDIRECT обработва текстовия низ в нея:

    INDIRECT("'"& "West"&"'!$A$2:$C$6")

    И го превръща в референция, която отива към table_array аргумент на VLOOKUP:

    VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)

    Накрая тази много стандартна формула VLOOKUP търси стойността A2 в първата колона на диапазона A2:C6 на West и връща съвпадение от втората колона. Това е всичко!

    Динамичен VLOOKUP за връщане на данни от няколко листа в различни клетки

    Първо, нека да определим какво точно означава думата "динамичен" в този контекст и по какво тази формула ще се различава от предишните.

    В случай че разполагате с големи части от данни в един и същи формат, които са разпределени в няколко електронни таблици, може да искате да извлечете информация от различни листове в различни клетки. Изображението по-долу илюстрира концепцията:

    За разлика от предишните формули, които извличаха стойност от конкретен лист въз основа на уникален идентификатор, този път искаме да извлечем стойности от няколко листа едновременно.

    Има две различни решения за тази задача. И в двата случая трябва да извършите малко подготвителна работа и да създадете именувани диапазони за клетките с данни във всеки лист за търсене. За този пример дефинирахме следните диапазони:

    • East_Sales - A2:B6 на източния лист
    • North_Sales - A2:B6 на северния лист
    • South_Sales - A2:B6 на южния лист
    • West_Sales - A2:B6 на западния лист

    VLOOKUP и вложени IFs

    Ако разполагате с разумен брой листове, които да търсите, можете да използвате вложени функции IF, за да изберете листа въз основа на ключовите думи в предварително определените клетки (клетки от B1 до D1 в нашия случай).

    С помощта на стойността за търсене в A2 формулата е следната:

    =VLOOKUP($A2, IF(B$1="east", East_Sales, IF(B$1="north", North_Sales, IF(B$1="south", South_Sales, IF(B$1="west", West_Sales)))), 2, FALSE)

    Преведена на английски език, частта от IF гласи:

    Ако B1 е Изток , потърсете диапазона с име East_Sales ; ако B1 е Северна , потърсете диапазона с име North_Sales ; ако B1 е Южна , потърсете диапазона с име South_Sales ; и ако B1 е West , потърсете диапазона с име West_Sales .

    Диапазонът, върнат от IF, е до table_array на VLOOKUP, който извлича съответстваща стойност от втората колона на съответния лист.

    Умното използване на смесени препратки за стойността за търсене ($A2 - абсолютна колона и относителен ред) и логическия тест на IF (B$1 - относителна колона и абсолютен ред) позволява копиране на формулата в други клетки без никакви промени - Excel настройва препратките автоматично въз основа на относителната позиция на реда и колоната.

    Така че въвеждаме формулата в B2, копираме я надясно и надолу в толкова колони и редове, колкото е необходимо, и получаваме следния резултат:

    НЕПРЯКО ПРЕГЛЕЖДАНЕ

    Когато работите с много листове, множеството вложени нива могат да направят формулата твърде дълга и трудна за четене. Много по-добър начин е да създадете динамичен обхват на vlookup с помощта на INDIRECT:

    =VLOOKUP($A2, INDIRECT(B$1&"_Sales"), 2, FALSE)

    Тук конкатенираме препратката към клетката, която съдържа уникалната част на именувания диапазон (B1), и общата част (_Sales). Така се получава текстов низ като "East_Sales", който INDIRECT преобразува в името на диапазона, разбираемо за Excel.

    В резултат на това получавате компактна формула, която работи чудесно върху всякакъв брой листове:

    Това е начинът за Vlookup между листове и файлове в Excel. Благодаря ви, че прочетохте, и се надявам да се видим в нашия блог следващата седмица!

    Практическа работна тетрадка за изтегляне

    Примери за Vlookup на няколко листа (.xlsx файл)

    Майкъл Браун е отдаден технологичен ентусиаст със страст към опростяване на сложни процеси с помощта на софтуерни инструменти. С повече от десетилетие опит в технологичната индустрия, той е усъвършенствал уменията си в Microsoft Excel и Outlook, както и в Google Sheets и Docs. Блогът на Майкъл е посветен на споделянето на неговите знания и опит с други, предоставяйки лесни за следване съвети и уроци за подобряване на продуктивността и ефективността. Независимо дали сте опитен професионалист или начинаещ, блогът на Michael предлага ценни прозрения и практически съвети за извличане на максимума от тези основни софтуерни инструменти.