VLOOKUP na viacerých listoch v programe Excel s príkladmi

  • Zdieľajte To
Michael Brown

Ukážka ukazuje, ako používať funkciu VLOOKUP na kopírovanie údajov z iného pracovného hárka alebo zošita, Vlookup vo viacerých hárkoch a dynamické vyhľadávanie na vrátenie hodnôt z rôznych hárkov do rôznych buniek.

Pri vyhľadávaní nejakých informácií v programe Excel je zriedkavý prípad, keď sa všetky údaje nachádzajú na tom istom hárku. Častejšie budete musieť vyhľadávať na viacerých hárkoch alebo dokonca v rôznych zošitoch. Dobrou správou je, že Microsoft Excel poskytuje viacero spôsobov, ako to urobiť, a zlou správou je, že všetky spôsoby sú trochu zložitejšie ako štandardný vzorec VLOOKUP. Stačí však trochu trpezlivosti a môžemepríde na ne :)

    Ako vykonať VLOOKUP medzi dvoma hárkami

    Na začiatok preskúmajme najjednoduchší prípad - použitie vzorca VLOOKUP na kopírovanie údajov z iného pracovného hárka. Je to veľmi podobné bežnému vzorcu VLOOKUP, ktorý vyhľadáva v tom istom hárku. Rozdiel je v tom, že do názvu hárka uvediete table_array argument, ktorý vášmu vzorcu povie, v ktorom hárku sa nachádza rozsah vyhľadávania.

    Všeobecný vzorec pre VLOOKUP z iného listu je nasledovný:

    VLOOKUP(lookup_value, Rozsah plechu! , col_index_num, [range_lookup])

    Ako príklad uvedieme údaje o predaji z Jan podať správu Zhrnutie Na tento účel definujeme nasledujúce argumenty:

    • Lookup_values sú v stĺpci A na Zhrnutie a odkazujeme na prvú dátovú bunku, ktorou je A2.
    • Table_array je rozsah A2:B6 v hárku Jan. Ak sa naň chcete odvolať, pred názov hárku vložte odkaz na rozsah, za ktorým nasleduje výkričník: Jan!$A$2:$B$6.

      Dbajte na to, že rozsah uzamkneme pomocou absolútnych odkazov na bunky, aby sme zabránili jeho zmene pri kopírovaní vzorca do iných buniek.

      Col_index_num je 2, pretože chceme skopírovať hodnotu zo stĺpca B, ktorý je druhým stĺpcom v poli tabuľky.

    • Range_lookup je nastavená na FALSE, aby sa vyhľadala presná zhoda.

    Ak si tieto argumenty spojíme, dostaneme tento vzorec:

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

    Presuňte vzorec do stĺpca a dostanete tento výsledok:

    Podobným spôsobom môžete vyhľadávať údaje z Február a Mar listy:

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

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

    Tipy a poznámky:

    • Ak názov listu obsahuje priestory alebo nealfabetické znaky , musí byť v jednoduchých úvodzovkách, ako napr. 'Jan Sales'!$A$2:$B$6 . Ďalšie informácie nájdete v časti Ako odkazovať na iný hárok v programe Excel.
    • Namiesto zadávania názvu hárku priamo do vzorca sa môžete prepnúť na vyhľadávací hárok a vybrať tam rozsah. Excel automaticky vloží odkaz so správnou syntaxou, čím vás ušetrí od kontroly názvu a riešenia problémov.

    Vlookup z iného zošita

    Ak chcete VLOOKUP medzi dvoma zošitmi, uveďte názov súboru v hranatých zátvorkách, za ktorým nasleduje názov hárku a výkričník.

    Ak chcete napríklad vyhľadať hodnotu A2 v rozsahu A2:B6 na Jan hárku v Sales_reports.xlsx použite tento vzorec:

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

    Podrobné informácie nájdete v časti VLOOKUP z iného zošita v programe Excel.

    Vlookup cez viacero hárkov s IFERROR

    Ak potrebujete vyhľadávať medzi viac ako dvoma hárkami, najjednoduchším riešením je použiť funkciu VLOOKUP v kombinácii s funkciou IFERROR. Ide o to, že sa vnorí niekoľko funkcií IFERROR, ktoré postupne skontrolujú viacero hárkov: ak prvá funkcia VLOOKUP nenájde zhodu na prvom hárku, hľadá sa v ďalšom hárku atď.

    IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Nenájdené "))

    Ak chcete vidieť, ako tento prístup funguje na reálnych údajoch, zoberme si nasledujúci príklad. Nižšie je Zhrnutie tabuľku, ktorú chceme naplniť názvami položiek a množstvami, vyhľadaním čísla objednávky v Západ a Východ listy:

    Najprv vytiahneme položky. Na tento účel dáme vzorcu VLOOKUP pokyn, aby vyhľadal číslo objednávky v A2 na Východ a vrátiť hodnotu zo stĺpca B (2. stĺpec v table_array A2:C6). Ak sa nenájde presná zhoda, vyhľadajte v Západ list. Ak obidva Vlookupy zlyhajú, vráti sa správa "Nenájdené".

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

    Ak chcete vrátiť sumu, stačí zmeniť číslo indexu stĺpca na 3:

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

    Tip. V prípade potreby môžete pre rôzne funkcie VLOOKUP určiť rôzne tabuľkové polia. V tomto príklade majú oba vyhľadávacie hárky rovnaký počet riadkov (A2:C6), ale vaše pracovné hárky môžu mať rôznu veľkosť.

    Vlookup vo viacerých zošitoch

    Ak chcete Vlookup medzi dvoma alebo viacerými zošitmi, uzavrite názov zošita do hranatých zátvoriek a vložte ho pred názov hárku. Napríklad takto môžete Vlookup v dva rôzne súbory ( Kniha1 a Kniha2 ) s jediným vzorcom:

    =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")

    Urobiť číslo indexu stĺpca dynamickým pre Vlookup viacerých stĺpcov

    V situácii, keď potrebujete vrátiť údaje z viacerých stĺpcov, môžete col_index_num Dynamic by vám mohol ušetriť čas. Je potrebné vykonať niekoľko úprav:

    • Pre col_index_num argument, použite funkciu COLUMNS, ktorá vráti počet stĺpcov v zadanom poli: COLUMNS($A$1:B$1). (Na súradnici riadku nezáleží, môže to byť ľubovoľný riadok.)
    • V lookup_value uzamknite odkaz na stĺpec so znakom $ ($A2), aby zostal pevný pri kopírovaní vzorca do iných stĺpcov.

    Výsledkom je akýsi dynamický vzorec, ktorý vyberá zodpovedajúce hodnoty z rôznych stĺpcov v závislosti od toho, do ktorého stĺpca je vzorec skopírovaný:

    =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")

    Po zadaní do stĺpca B sa COLUMNS($A$1:B$1) vyhodnotí ako 2, čo znamená, že VLOOKUP vráti hodnotu z druhého stĺpca tabuľky.

    Pri kopírovaní do stĺpca C (t. j. vzorec ste presunuli z B2 do C2) sa B$1 zmení na C$1, pretože odkaz na stĺpec je relatívny. Následne sa COLUMNS($A$1:C$1) vyhodnotí ako 3 a prinúti VLOOKUP vrátiť hodnotu z tretieho stĺpca.

    Tento vzorec funguje skvele pre 2 - 3 vyhľadávacie hárky. Ak ich máte viac, opakované IFERRORy sa stávajú príliš ťažkopádnymi. Ďalší príklad demonštruje trochu zložitejší, ale oveľa elegantnejší prístup.

    Vlookup viacerých hárkov s INDIRECT

    Jedným z ďalších spôsobov, ako v aplikácii Excel vykonať Vlookup medzi viacerými hárkami, je použiť kombináciu funkcií VLOOKUP a INDIRECT. Tento spôsob si vyžaduje trochu prípravy, ale nakoniec získate kompaktnejší vzorec na Vlookup v ľubovoľnom počte tabuľkových hárkov.

    Všeobecný vzorec pre Vlookup naprieč hárkami je nasledovný:

    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)

    Kde:

    • Lookup_sheets - pomenovaný rozsah pozostávajúci z názvov vyhľadávacích hárkov.
    • Lookup_value - hodnota, ktorá sa má vyhľadať.
    • Lookup_range - rozsah stĺpcov v hárkoch vyhľadávania, v ktorých sa má hľadať hodnota vyhľadávania.
    • Table_array - rozsah údajov vo vyhľadávacích hárkoch.
    • Col_index_num - číslo stĺpca v poli tabuľky, z ktorého sa má vrátiť hodnota.

    Aby vzorec fungoval správne, majte na pamäti nasledujúce upozornenia:

    • Ide o vzorec poľa, ktorý je potrebné doplniť stlačením klávesov Ctrl + Shift + Enter súčasne.
    • Všetky listy musia mať rovnaké poradie stĺpcov .
    • Keďže pre všetky vyhľadávacie hárky používame jedno tabuľkové pole, zadajte najväčší rozsah ak majú vaše hárky rôzny počet riadkov.

    Ako používať vzorec na vyhľadávanie naprieč hárkami

    Ak chcete vyhľadať viacero hárkov naraz, vykonajte tieto kroky:

    1. Zapíšte si všetky názvy vyhľadávacích hárkov niekde v zošite a pomenujte tento rozsah ( Lookup_sheets v našom prípade).

  • Upravte všeobecný vzorec pre vaše údaje. V tomto príklade budeme:
    • hľadanie hodnoty A2 ( lookup_value )
    • v rozsahu A2:A6 ( lookup_range ) v štyroch pracovných listoch ( Východ , Sever , Južná a Západ ) a
    • vytiahnuť zodpovedajúce hodnoty zo stĺpca B, čo je stĺpec 2 ( col_index_num ) v rozsahu údajov A2:C6 ( table_array ).

    S uvedenými argumentmi má vzorec tento tvar:

    =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)

    Všimnite si, že oba rozsahy ($A$2:$A$6 a $A$2:$C$6) sme uzamkli pomocou absolútnych odkazov na bunky.

  • Zadajte vzorec do najvyššej bunky (v tomto príklade B2) a stlačte klávesovú skratku Ctrl + Shift + Enter, aby ste ho dokončili.
  • Dvakrát kliknite alebo potiahnite rukoväť výplne, aby ste vzorec skopírovali do stĺpca.
  • Výsledkom je vzorec, ktorý vyhľadá číslo objednávky v 4 listoch a načíta príslušnú položku. Ak sa konkrétne číslo objednávky nenájde, zobrazí sa chyba #N/A ako v riadku 14:

    Ak chcete vrátiť sumu, jednoducho nahraďte 2 za 3 v col_index_num argument ako sumy v 3. stĺpci tabuľkového poľa:

    =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)

    Ak chcete nahradiť štandardný zápis chyby #N/A vlastným textom, vložte vzorec do funkcie 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 viacerých listov medzi zošitmi

    Tento všeobecný vzorec (alebo jeho ľubovoľná variácia) možno použiť aj na vyhľadávanie viacerých hárkov v iný zošit Na tento účel spojte názov zošita do INDIRECT, ako je uvedené v nasledujúcom vzorci:

    =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 medzi hárkami a vrátenie viacerých stĺpcov

    Ak chcete vytiahnuť údaje z viacerých stĺpcov, môžete vzorec pre viacbunkové pole to dokáže urobiť jedným ťahom. Ak chcete vytvoriť takýto vzorec, zadajte konštantu poľa pre col_index_num argument.

    V tomto príklade chceme vrátiť názvy položiek (stĺpec B) a sumy (stĺpec C), ktoré sú 2. a 3. stĺpcom v tabuľkovom poli. Požadované pole je teda {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)

    Ak chcete správne zadať vzorec do viacerých buniek, musíte urobiť toto:

    • V prvom riadku vyberte všetky bunky, ktoré sa majú vyplniť (v našom príklade B2:C2).
    • Zadajte vzorec a stlačte klávesovú skratku Ctrl + Shift + Enter . Tým sa do vybraných buniek zadá rovnaký vzorec, ktorý v každom stĺpci vráti inú hodnotu.
    • Presuňte vzorec do zostávajúcich riadkov.

    Ako tento vzorec funguje

    Aby sme lepšie pochopili logiku, rozdeľme tento základný vzorec na jednotlivé funkcie:

    =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)

    Tento vzorec funguje zvnútra von:

    COUNTIF a INDIRECT

    Stručne povedané, INDIRECT vytvára odkazy pre všetky listy vyhľadávania a COUNTIF počíta výskyty hodnoty vyhľadávania (A2) v každom liste:

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

    Podrobnejšie:

    Najprv spojíte názov rozsahu (Lookup_sheets) a odkaz na rozsah ($A$2:$A$6), pridáte apostrofy a výkričník na správne miesta, aby ste vytvorili externý odkaz, a výsledný textový reťazec odovzdáte funkcii INDIRECT, aby dynamicky odkazovala na vyhľadávacie hárky:

    INDIRECT({"'východ'!$A$2:$A$6"; "'juh'!$A$2:$A$6"; "'sever'!$A$2:$A$6"; "'západ'!$A$2:$A$6"})

    COUNTIF skontroluje každú bunku v rozsahu A2:A6 na každom vyhľadávacom hárku s hodnotou v A2 na hlavnom hárku a vráti počet zhody pre každý hárok. V našom súbore údajov sa poradové číslo v A2 (101) nachádza v Západ list, ktorý je štvrtý v uvedenom rozsahu, takže COUNTIF vráti toto pole:

    {0;0;0;1}

    Potom porovnáte každý prvok uvedeného poľa s hodnotou 0:

    --({0; 0; 0; 1}>0)

    Výsledkom je pole hodnôt TRUE (väčšia ako 0) a FALSE (rovná sa 0), ktoré pomocou dvojitého unáru (--) zmeníte na 1 a 0 a ako výsledok dostanete nasledujúce pole:

    {0; 0; 0; 1}

    Táto operácia je dodatočným opatrením pre prípad, že vyhľadávací hárok obsahuje viacero výskytov vyhľadávanej hodnoty, v takom prípade by COUNTIF vrátil počet väčší ako 1, zatiaľ čo my chceme mať vo výslednom poli len 1 a 0 (za chvíľu pochopíte prečo).

    Po všetkých týchto transformáciách vyzerá náš vzorec takto:

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

    INDEX a MATCH

    V tomto momente nastupuje klasická kombinácia INDEX MATCH:

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

    Funkcia MATCH nakonfigurovaná na presnú zhodu (0 v poslednom argumente) hľadá hodnotu 1 v poli {0;0;0;1} a vráti jej pozíciu, ktorá je 4:

    INDEX(Lookup_sheets, 4)

    Funkcia INDEX použije číslo vrátené funkciou MATCH ako argument čísla riadku (row_num) a vráti 4. hodnotu v pomenovanom rozsahu Lookup_sheets , čo je Západ .

    Vzorec sa teda ďalej redukuje na:

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

    VLOOKUP a INDIRECT

    Funkcia INDIRECT spracuje textový reťazec, ktorý sa v nej nachádza:

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

    A prevedie ho na odkaz, ktorý sa prenesie do table_array argument VLOOKUP:

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

    Nakoniec tento veľmi štandardný vzorec VLOOKUP hľadá hodnotu A2 v prvom stĺpci rozsahu A2:C6 na Západ a vráti zhodu z 2. stĺpca. To je všetko!

    Dynamický VLOOKUP na vrátenie údajov z viacerých listov do rôznych buniek

    Najprv si definujme, čo presne v tomto kontexte znamená slovo "dynamický" a ako sa tento vzorec bude líšiť od predchádzajúcich.

    V prípade, že máte veľké časti údajov v rovnakom formáte, ktoré sú rozdelené do viacerých tabuľkových hárkov, možno budete chcieť extrahovať informácie z rôznych hárkov do rôznych buniek. Obrázok nižšie ilustruje tento koncept:

    Na rozdiel od predchádzajúcich vzorcov, ktoré získavali hodnotu z konkrétneho hárku na základe jedinečného identifikátora, tentoraz chceme získať hodnoty z viacerých hárkov naraz.

    Pre túto úlohu existujú dve rôzne riešenia. V oboch prípadoch je potrebné vykonať trochu prípravnej práce a vytvoriť pomenované rozsahy pre bunky údajov v každom vyhľadávacom hárku. Pre tento príklad sme definovali nasledujúce rozsahy:

    • East_Sales - A2:B6 na východnom liste
    • North_Sales - A2:B6 na severnom liste
    • South_Sales - A2:B6 na južnom liste
    • West_Sales - A2:B6 na západnom liste

    VLOOKUP a vnorené IF

    Ak máte primeraný počet hárkov, ktoré chcete vyhľadať, môžete použiť vnorené funkcie IF na výber hárku na základe kľúčových slov v preddefinovaných bunkách (v našom prípade v bunkách B1 až D1).

    S vyhľadávacou hodnotou v A2 je vzorec nasledujúci:

    =VLOOKUP($A2, IF(B$1="východ", East_Sales, IF(B$1="sever", North_Sales, IF(B$1="juh", South_Sales, IF(B$1="západ", West_Sales)))), 2, FALSE)

    V preklade do angličtiny časť IF znie:

    Ak je B1 Východ , pozrite sa do rozsahu s názvom East_Sales ; ak B1 je Sever , pozrite sa do rozsahu s názvom North_Sales ; ak B1 je Južná , pozrite sa do rozsahu s názvom South_Sales ; a ak B1 je Západ , pozrite sa do rozsahu s názvom West_Sales .

    Rozsah vrátený funkciou IF siaha do table_array VLOOKUP, ktorý vytiahne zodpovedajúcu hodnotu z 2. stĺpca na príslušnom liste.

    Šikovné použitie zmiešaných odkazov pre vyhľadávanú hodnotu ($A2 - absolútny stĺpec a relatívny riadok) a logický test IF (B$1 - relatívny stĺpec a absolútny riadok) umožňuje kopírovať vzorec do iných buniek bez akýchkoľvek zmien - Excel automaticky upraví odkazy na základe relatívnej pozície riadku a stĺpca.

    Zadáme teda vzorec do B2, skopírujeme ho doprava a nadol do toľkých stĺpcov a riadkov, koľko potrebujeme, a dostaneme nasledujúci výsledok:

    NEPRIAME VYHĽADÁVANIE

    Pri práci s mnohými hárkami by viaceré vnorené úrovne mohli spôsobiť, že vzorec bude príliš dlhý a ťažko čitateľný. Oveľa lepším spôsobom je vytvoriť dynamický rozsah vlookup pomocou INDIRECT:

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

    Tu spojíme odkaz na bunku, ktorá obsahuje jedinečnú časť pomenovaného rozsahu (B1) a spoločnú časť (_Sales). Vznikne tak textový reťazec typu "East_Sales", ktorý INDIRECT prevedie na názov rozsahu zrozumiteľný pre Excel.

    Výsledkom je kompaktný vzorec, ktorý sa výborne hodí na akýkoľvek počet listov:

    To je návod na Vlookup medzi hárkami a súbormi v programe Excel. Ďakujem vám za prečítanie a dúfam, že sa uvidíme na našom blogu budúci týždeň!

    Cvičebnica na stiahnutie

    Príklady Vlookup viacerých listov (.xlsx súbor)

    Michael Brown je nadšený technologický nadšenec s vášňou pre zjednodušovanie zložitých procesov pomocou softvérových nástrojov. S viac ako desaťročnými skúsenosťami v technologickom priemysle si zdokonalil svoje zručnosti v programoch Microsoft Excel a Outlook, ako aj Tabuľky Google a Dokumenty. Michaelov blog je venovaný zdieľaniu svojich vedomostí a odborných znalostí s ostatnými a poskytuje jednoduché tipy a návody na zlepšenie produktivity a efektivity. Či už ste skúsený profesionál alebo začiatočník, Michaelov blog ponúka cenné poznatky a praktické rady, ako z týchto základných softvérových nástrojov vyťažiť maximum.