VLOOKUP низ повеќе листови во Excel со примери

  • Споделете Го Ова
Michael Brown

Упатството покажува како да се користи функцијата VLOOKUP за копирање податоци од друг работен лист или работна книга, Vlookup во повеќе листови и динамично пребарување за да се вратат вредностите од различни листови во различни ќелии.

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

    Како да VLOOKUP помеѓу два листа

    За почеток, ајде да истражиме наједноставен случај - користејќи VLOOKUP за да копирајте податоци од друг работен лист. Тоа е многу слично на обична формула VLOOKUP која пребарува на истиот работен лист. Разликата е во тоа што го вклучувате името на листот во аргументот table_array за да ја кажете вашата формула во кој работен лист се наоѓа опсегот на пребарување.

    Генеричката формула за VLOOKUP од друг лист е следна:

    VLOOKUP(lookup_value, Sheet!range, col_index_num, [range_lookup])

    Како пример, да ги повлечеме бројките за продажба од извештајот јан до Резиме лист. За ова, ги дефинираме следните аргументи:

    • Lookup_values се во колоната А на листот Summary , а ниеVLOOKUP:

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

      Конечно, оваа стандардна формула VLOOKUP ја бара вредноста A2 во првата колона од опсегот A2:C6 на листот West и враќа натпревар од 2 колона. Тоа е тоа!

      Динамично VLOOKUP за враќање на податоци од повеќе листови во различни ќелии

      Прво, да дефинираме што точно значи зборот „динамичен“ во овој контекст и како ќе биде оваа формула различни од претходните.

      Во случај да имате големи делови од податоци во ист формат кои се поделени на повеќе табели, можеби ќе сакате да извлечете информации од различни листови во различни ќелии. Сликата подолу го илустрира концептот:

      За разлика од претходните формули кои добиваа вредност од одреден лист врз основа на единствен идентификатор, овој пат бараме да извлечеме вредности од неколку листови на време.

      Постојат две различни решенија за оваа задача. Во двата случаи, треба да направите малку подготвителна работа и да креирате именувани опсези за ќелии со податоци во секој лист за пребарување. За овој пример, ги дефиниравме следните опсези:

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

      VLOOKUP и вгнездени IF

      Ако имате разумен број листови за пребарување, можете да ги користите вгнездените функции 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 , погледнете во опсегот со име East_Sales ; ако B1 е Север , погледнете во опсегот со име North_Sales ; ако B1 е Југ , погледнете во опсегот со име South_Sales ; и ако B1 е West , погледнете во опсегот со име West_Sales .

      Опсегот вратен од IF оди во table_array на VLOOKUP, што повлекува соодветна вредност од 2-та колона на соодветниот лист.

      Паметната употреба на мешани референци за бараната вредност ($A2 - апсолутна колона и релативен ред) и логичкиот тест на IF (B$1 - релативна колона и апсолутен ред) овозможува копирање на формулата во други ќелии без никакви промени - Excel автоматски ги прилагодува референците врз основа на релативната позиција на редот и колоната.

      Значи, ја внесуваме формулата во B2, ја копираме десно и до онолку колони и редови колку што е потребно и да го добиете следниот резултат:

      INDIRECT VLOOKUP

      Кога работите со многу листови, повеќе вгнездени нивоа би можеле да ја направат и формулата долга и тешка за читање. Далеку подобар начин е да се создаде динамичен опсег на vlookup со помош на INDIRECT:

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

      Овде, ја поврзуваме референцата со ќелијата што содржиединствен дел од именуваниот опсег (B1) и заедничкиот дел (_Sales). Ова произведува текстуална низа како „East_Sales“, која INDIRECT ја претвора во име на опсег разбирливо од Excel.

      Како резултат на тоа, добивате компактна формула која работи прекрасно на кој било број на листови:

      Така се врши пребарување помеѓу листови и датотеки во Excel. Ви благодарам што прочитавте и се надевам дека ќе се видиме на нашиот блог следната недела!

      Вежбајте ја работната книга за преземање

      Примери на повеќе листови (датотека .xlsx) на Vlookup

      погледнете ја првата податочна ќелија, која е A2.
    • Table_Array е опсегот A2:B6 на листот Jan. За да се повикате на него, префиксирајте ја референцата за опсег со името на листот проследено со извичник: Jan!$A$2:$B$6.

      Ве молиме обрнете внимание дека го заклучуваме опсегот со апсолутни референци на ќелиите за да спречиме негово менување при копирање на формулата во други ќелии.

      Col_index_num е 2 затоа што сакаме да копираме вредност од колоната Б, која е втора колона во низата табели.

    • Пребарување_опсег е поставено на 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)

    Совети и забелешки:

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

    Преглед од друга работна книга

    До VLOOKUP помеѓу двеработните книги, вклучете го името на датотеката во квадратни загради, проследено со името на листот и извичникот.

    На пример, за пребарување на вредноста A2 во опсегот A2:B6 на листот Jan во работната книга 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 и East :

    Прво, ќе ги повлечеме предметите. За ова, ја наложуваме формулата VLOOKUP да го бара бројот на нарачката во A2 на листот East и да ја врати вредноста од колоната B (втора колона во table_array A2:C6). Ако не се најде точно совпаѓање, тогаш побарајте во листот West . Ако двата Vlookups не успеат, вратете го „Не е пронајдено“.

    =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), но вашите работни листови може да бидат различни по големина.

    Преглед во повеќе работни книги

    За да направите пребарување помеѓу две или повеќе работни книги, ставете го името на работната книга во квадратни загради и ставете го пред името на листот. На пример, еве како можете да пребарувате во две различни датотеки ( Книга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),"Not found"))

    Направете го бројот на индексот на колоната динамичен во Vlookup повеќе колони

    Во ситуација кога треба да вратите податоци од неколку колони, правењето col_index_num динамично може да ви заштеди малку време. Треба да се направат неколку прилагодувања:

    • За аргументот col_index_num , користете ја функцијата COLUMNS која го враќа бројот на колони во одредена низа: COLUMNS($A$1 :Б $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"))

    Кога се внесени во колоната Б, КОЛУМНИ ($A$1:B$1)оценува на 2 кажувајќи му на VLOOKUP да врати вредност од 2-та колона во низата табели.

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

    Оваа формула работи одлично за 2 - 3 листа за пребарување. Ако имате повеќе, повторливите IFERROR стануваат премногу незгодни. Следниот пример покажува малку покомплициран, но многу поелегантен пристап.

    Преглед на повеќе листови со INDIRECT

    Уште еден начин за Vlookup помеѓу повеќе листови во Excel е да се користи комбинација од VLOOKUP и INDIRECT функции. Овој метод бара малку подготовка, но на крајот, ќе имате покомпактна формула за Vlookup во кој било број табеларни пресметки.

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

    VLOOKUP( пробај_вредност , INDIRECT("'"&INDEX( Пребарување_листови , MATCH(1, --(COUNTIF(INDIRECT("'" & Побарај_листови & " '! опсег на_преглед "), вредност_побарување )>0), 0)) & "'! табела_низа "), кол_индекс_број , НЕТОЧНО)

    Каде:

    • Листови за пребарување - именуван опсег кој се состои од имиња на листови за пребарување.
    • Вредност_пребарување - вредност за пребарување.
    • Опсег_пребарување - опсегот на колоните во листовите за пребарување каде да се бара пребарувањетовредност.
    • Табела_низа - опсегот на податоци во листовите за пребарување.
    • Col_index_num - бројот на колоната во низата табела од која се вратете вредност.

    За формулата да работи правилно, ве молиме имајте ги на ум следните предупредувања:

    • Тоа е формула за низа, која мора да се пополни со притискање на Ctrl + Копчињата Shift + Enter заедно.
    • Сите листови мора да имаат ист редослед на колони .
    • Како што користиме една низа табели за сите листови за пребарување, наведете го најголем опсег ако вашите листови имаат различен број на редови.

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

    За да Vlookup повеќе листови истовремено, направете ги овие чекори:

    1. Запишете ги сите имиња на листови за пребарување некаде во вашата работна книга и именувајте го тој опсег ( Побарајте_листови во нашиот случај).

  • Прилагодете ја генеричката формула за вашите податоци. Во овој пример, ние ќе бидеме:
    • пребаруваме вредност A2 ( lookup_value )
    • во опсегот A2:A6 ( lookup_range ) во четири работни листови ( Исток , Север , Југ и Запад ) и
    • повлечете соодветни вредности од колоната Б, која е колона 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 Аргументот бидејќи износите се во 3-та колона од низата табели:

    =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 повеќе листови во различна работна книга . За ова, спојте го името на работната книга во 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")

    Пребарување помеѓу листови и вратете повеќе колони

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

    Во овој пример, сакаме да ги вратиме имињата на ставките (колона B) и износите (колона C), кои се 2-та и 3-та колона во низата на табелата, соодветно. Значи, потребната низа е{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 на

    Мајкл Браун е посветен технолошки ентузијаст со страст за поедноставување на сложените процеси користејќи софтверски алатки. Со повеќе од една деценија искуство во технолошката индустрија, тој ги усоврши своите вештини во Microsoft Excel и Outlook, како и Google Sheets и Docs. Блогот на Мајкл е посветен на споделување на своето знаење и експертиза со другите, обезбедувајќи лесни за следење совети и упатства за подобрување на продуктивноста и ефикасноста. Без разлика дали сте искусен професионалец или почетник, блогот на Мајкл нуди вредни сознанија и практични совети за да го извлечете максимумот од овие основни софтверски алатки.