VLOOKUP na více listech v aplikaci Excel s příklady

  • Sdílet Toto
Michael Brown

Tento kurz ukazuje, jak používat funkci VLOOKUP ke kopírování dat z jiného listu nebo sešitu, Vlookup ve více listech a dynamické vyhledávání pro návrat hodnot z různých listů do různých buněk.

Při vyhledávání nějakých informací v aplikaci Excel se jen výjimečně stává, že se všechna data nacházejí na jednom listu. Častěji budete muset vyhledávat na více listech nebo dokonce v různých sešitech. Dobrou zprávou je, že aplikace Microsoft Excel nabízí více způsobů, jak to provést, a špatnou zprávou je, že všechny způsoby jsou o něco složitější než standardní vzorec VLOOKUP. Stačí však trocha trpělivosti a můžemepřijde na ně :)

    Jak provést VLOOKUP mezi dvěma listy

    Pro začátek prozkoumejme nejjednodušší případ - použití vzorce VLOOKUP ke kopírování dat z jiného listu. Je to velmi podobné běžnému vzorci VLOOKUP, který vyhledává na stejném listu. Rozdíl je v tom, že do vzorce VLOOKUP uvedete název listu. table_array argumentu, který vašemu vzorci říká, ve kterém pracovním listu se nachází rozsah vyhledávání.

    Obecný vzorec pro VLOOKUP z jiného listu je následující:

    VLOOKUP(lookup_value, List!rozsah , col_index_num, [range_lookup])

    Jako příklad uveďme údaje o prodeji ze stránek Jan hlášení do Souhrn Za tímto účelem definujeme následující argumenty:

    • Lookup_values jsou ve sloupci A na Souhrn a odkazujeme na první datovou buňku, kterou je A2.
    • Table_array je rozsah A2:B6 na listu Jan. Chcete-li se na něj odkázat, předepište odkaz na rozsah názvem listu následovaným vykřičníkem: Jan!$A$2:$B$6.

      Věnujte prosím pozornost tomu, že rozsah uzamkneme pomocí absolutních odkazů na buňky, abychom zabránili jeho změně při kopírování vzorce do jiných buněk.

      Col_index_num je 2, protože chceme zkopírovat hodnotu ze sloupce B, což je 2. sloupec v poli tabulky.

    • Range_lookup je nastavena na hodnotu FALSE, aby se vyhledala přesná shoda.

    Když si argumenty spojíme, získáme tento vzorec:

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

    Přetáhněte vzorec dolů do sloupce a získáte tento výsledek:

    Podobným způsobem můžete vyhledávat data z okna Únor a Mar listů:

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

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

    Tipy a poznámky:

    • Pokud název listu obsahuje prostory nebo nealfabetické znaky , musí být uzavřen v jednoduchých uvozovkách, jako např. 'Jan Sales'!$A$2:$B$6 . Další informace naleznete v části Jak odkazovat na jiný list v aplikaci Excel.
    • Místo zadávání názvu listu přímo do vzorce můžete přepnout na list pro vyhledávání a vybrat rozsah tam. Excel automaticky vloží odkaz se správnou syntaxí, čímž vás ušetří kontroly názvu a řešení problémů.

    Vlookup z jiného sešitu

    Chcete-li provést VLOOKUP mezi dvěma sešity, uveďte název souboru v hranatých závorkách, za ním název listu a vykřičník.

    Chcete-li například vyhledat hodnotu A2 v rozsahu A2:B6 na adrese Jan list v Sales_reports.xlsx sešitu použijte tento vzorec:

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

    Podrobné informace naleznete v části VLOOKUP z jiného sešitu v aplikaci Excel.

    Vlookup přes více listů s IFERROR

    Pokud potřebujete vyhledávat mezi více než dvěma listy, je nejjednodušším řešením použití funkce VLOOKUP v kombinaci s funkcí IFERROR. Jde o to, že se vnoří několik funkcí IFERROR, které postupně zkontrolují více listů: pokud první funkce VLOOKUP nenajde shodu na prvním listu, hledá se v dalším listu atd.

    IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Nenalezeno "))

    Abychom viděli, jak tento přístup funguje na reálných datech, podívejme se na následující příklad. Níže je uvedeno Souhrn tabulku, kterou chceme naplnit názvy položek a částkami, a to tak, že vyhledáme číslo objednávky v West a Východní listů:

    Nejprve vytáhneme položky. Za tímto účelem dáme vzorci VLOOKUP pokyn, aby vyhledal číslo objednávky v A2 na Východní a vrátit hodnotu ze sloupce B (2. sloupec v položce table_array A2:C6). Pokud není nalezena přesná shoda, hledejte v poli West list. Pokud oba Vlookupy selžou, vrátí se zpráva "Nenalezeno".

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

    Chcete-li vrátit částku, stačí změnit číslo indexu sloupce 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 případě potřeby můžete pro různé funkce VLOOKUP zadat různá pole tabulek. V tomto příkladu mají oba vyhledávací listy stejný počet řádků (A2:C6), ale vaše pracovní listy mohou mít různou velikost.

    Vlookup ve více sešitech

    Chcete-li provést Vlookup mezi dvěma nebo více sešity, uzavřete název sešitu do hranatých závorek a vložte jej před název listu. Například takto můžete provést Vlookup v. dva různé soubory ( Kniha1 a Kniha2 ) s jediným vzorcem:

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

    Vytvoření dynamického čísla indexu sloupce pro Vlookup více sloupců

    V situaci, kdy potřebujete vrátit data z několika sloupců, je nutné provést col_index_num Dynamic by vám mohl ušetřit čas. Je třeba provést několik úprav:

    • Pro col_index_num použijte funkci COLUMNS, která vrací počet sloupců v zadaném poli: COLUMNS($A$1:B$1). (Na souřadnici řádku nezáleží, může to být libovolný řádek.)
    • V lookup_value uzamkněte odkaz na sloupec pomocí znaménka $ ($A2), aby zůstal při kopírování vzorce do jiných sloupců neměnný.

    Výsledkem je jakýsi dynamický vzorec, který vybírá odpovídající hodnoty z různých sloupců v závislosti na tom, do kterého sloupce je vzorec zkopírován:

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

    Při zadání do sloupce B se COLUMNS($A$1:B$1) vyhodnotí jako 2, což znamená, že VLOOKUP vrátí hodnotu z 2. sloupce v poli tabulky.

    Při kopírování do sloupce C (tj. vzorec jste přetáhli z B2 do C2) se B$1 změní na C$1, protože odkaz na sloupec je relativní. Proto se COLUMNS($A$1:C$1) vyhodnotí jako 3 a VLOOKUP vrátí hodnotu ze třetího sloupce.

    Tento vzorec funguje skvěle pro 2 - 3 vyhledávací listy. Pokud jich máte více, opakované IFERRORy se stanou příliš těžkopádnými. Další příklad ukazuje trochu složitější, ale mnohem elegantnější přístup.

    Vlookup více listů pomocí INDIRECT

    Dalším způsobem, jak v Excelu provádět Vlookup mezi více listy, je použít kombinaci funkcí VLOOKUP a INDIRECT. Tento způsob vyžaduje trochu přípravy, ale nakonec získáte kompaktnější vzorec pro Vlookup v libovolném počtu tabulek.

    Obecný vzorec pro Vlookup napříč listy je následující:

    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 - pojmenovaný rozsah složený z názvů vyhledávacích archů.
    • Lookup_value - hodnotu, kterou chcete vyhledat.
    • Lookup_range - rozsah sloupců v listech vyhledávání, ve kterých se má hledat hodnota vyhledávání.
    • Table_array - rozsah dat ve vyhledávacích listech.
    • Col_index_num - číslo sloupce v poli tabulky, ze kterého se má vrátit hodnota.

    Aby vzorec fungoval správně, mějte na paměti následující upozornění:

    • Jedná se o vzorec pole, který je třeba doplnit stisknutím kláves Ctrl + Shift + Enter najednou.
    • Všechny listy musí mít stejné pořadí sloupců .
    • Protože používáme jedno pole tabulek pro všechny vyhledávací listy, zadejte pole největší rozsah pokud mají vaše listy různý počet řádků.

    Jak použít vzorec pro Vlookup napříč listy

    Chcete-li vyhledat více listů najednou, proveďte tyto kroky:

    1. Zapište si někam do sešitu názvy všech listů pro vyhledávání a pojmenujte tento rozsah ( Lookup_sheets v našem případě).

  • Upravte obecný vzorec pro svá data. V tomto příkladu budeme:
    • hledání hodnoty A2 ( lookup_value )
    • v rozsahu A2:A6 ( lookup_range ) ve čtyřech pracovních listech ( Východní , Severní , Jižní a West ) a
    • vytáhnout odpovídající hodnoty ze sloupce B, což je sloupec 2 ( col_index_num ) v datovém rozsahu A2:C6 ( table_array ).

    S výše uvedenými argumenty 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šimněte si, že oba rozsahy ($A$2:$A$6 a $A$2:$C$6) zamykáme pomocí absolutních odkazů na buňky.

  • Zadejte vzorec do nejvyšší buňky (v tomto příkladu B2) a dokončete jej stisknutím kláves Ctrl + Shift + Enter.
  • Dvojklikem nebo přetažením úchytu výplně zkopírujete vzorec dolů do sloupce.
  • Výsledkem je vzorec, který vyhledá číslo objednávky ve 4 listech a načte odpovídající položku. Pokud není nalezeno konkrétní číslo objednávky, zobrazí se chyba #N/A jako v řádku 14:

    Chcete-li vrátit částku, jednoduše nahraďte 2 číslem 3 v poli col_index_num argument jako částky ve 3. sloupci pole tabulky:

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

    Pokud chcete nahradit standardní zápis chyby #N/A vlastním textem, zabalte vzorec do funkce 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 více listů mezi sešity

    Tento obecný vzorec (nebo jeho libovolnou obměnu) lze použít také k vyhledávání více listů v jednom jiný sešit . Za tímto účelem spojte název sešitu uvnitř INDIRECT, jak je uvedeno v následujícím 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 mezi listy a vrácení více sloupců

    Pokud chcete vytáhnout data z několika sloupců, můžete použít funkci vzorec pro vícebuněčné pole To lze provést najednou. Chcete-li vytvořit takový vzorec, zadejte konstantu pole pro vzorec col_index_num argument.

    V tomto příkladu chceme vrátit názvy položek (sloupec B) a částky (sloupec C), což jsou 2. a 3. sloupec pole tabulky. Požadované pole je tedy {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)

    Chcete-li správně zadat vzorec do více buněk, musíte postupovat takto:

    • V prvním řádku vyberte všechny buňky, které mají být vyplněny (v našem příkladu B2:C2).
    • Zadejte vzorec a stiskněte klávesy Ctrl + Shift + Enter . Tím se do vybraných buněk zadá stejný vzorec, který v každém sloupci vrátí jinou hodnotu.
    • Přetáhněte vzorec dolů na zbývající řádky.

    Jak tento vzorec funguje

    Pro lepší pochopení logiky si tento základní vzorec rozebereme na jednotlivé funkce:

    =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 zevnitř ven:

    COUNTIF a INDIRECT

    Stručně řečeno, INDIRECT vytváří odkazy pro všechny listy vyhledávání a COUNTIF počítá výskyty hodnoty vyhledávání (A2) v každém listu:

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

    Podrobněji:

    Nejprve spojíte název rozsahu (Lookup_sheets) a odkaz na rozsah ($A$2:$A$6), přidáte apostrofy a vykřičník na správná místa, abyste vytvořili externí odkaz, a výsledný textový řetězec předáte funkci INDIRECT, aby dynamicky odkazovala na vyhledávací listy:

    INDIRECT({"'Východ'!$A$2:$A$6"; "'Jih'!$A$2:$A$6"; "'Sever'!$A$2:$A$6"; "'Západ'!$A$2:$A$6"})

    COUNTIF zkontroluje každou buňku v rozsahu A2:A6 na každém listu vyhledávání s hodnotou v A2 na hlavním listu a vrátí počet shod pro každý list. V našem souboru dat se číslo zakázky v A2 (101) nachází v položce West list, který je 4. v uvedeném rozsahu, takže COUNTIF vrací toto pole:

    {0;0;0;1}

    Poté porovnáte každý prvek výše uvedeného pole s hodnotou 0:

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

    Tím získáte pole hodnot TRUE (větší než 0) a FALSE (rovná se 0), které pomocí dvojitého unárního znaku (--) převedete na 1 a 0 a jako výsledek získáte následující pole:

    {0; 0; 0; 1}

    Tato operace je dodatečným opatřením pro případ, kdy list vyhledávání obsahuje několik výskytů hodnoty vyhledávání, v takovém případě by COUNTIF vrátil počet větší než 1, zatímco my chceme mít ve výsledném poli pouze jedničky a nuly (za chvíli pochopíte proč).

    Po všech těchto transformacích vypadá 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 okamžiku nastoupí klasická kombinace INDEX MATCH:

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

    Funkce MATCH nastavená na přesnou shodu (0 v posledním argumentu) hledá hodnotu 1 v poli {0;0;0;1} a vrací její pozici, která je 4:

    INDEX(Lookup_sheets, 4)

    Funkce INDEX použije číslo vrácené funkcí MATCH jako argument čísla řádku (row_num) a vrátí 4. hodnotu ve jmenovaném rozsahu. Lookup_sheets , což je West .

    Vzorec se tedy dále redukuje na:

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

    VLOOKUP a INDIRECT

    Funkce INDIRECT zpracovává textový řetězec uvnitř:

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

    a převede ji na odkaz, který přejde do položky table_array argument VLOOKUP:

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

    Nakonec tento velmi standardní vzorec VLOOKUP hledá hodnotu A2 v prvním sloupci rozsahu A2:C6 na stránce West a vrátí shodu z 2. sloupce. To je vše!

    Dynamický VLOOKUP pro vrácení dat z více listů do různých buněk

    Nejprve si definujme, co přesně v tomto kontextu znamená slovo "dynamický" a jak se bude tento vzorec lišit od předchozích.

    V případě, že máte velké kusy dat ve stejném formátu, které jsou rozděleny do více tabulek, můžete chtít extrahovat informace z různých listů do různých buněk. Obrázek níže ilustruje tento koncept:

    Na rozdíl od předchozích vzorců, které získávaly hodnotu z konkrétního listu na základě jedinečného identifikátoru, tentokrát chceme získat hodnoty z několika listů najednou.

    Pro tento úkol existují dvě různá řešení. V obou případech je třeba provést malou přípravnou práci a vytvořit pojmenované rozsahy pro datové buňky v každém listu vyhledávání. Pro tento příklad jsme definovali následující rozsahy:

    • East_Sales - A2:B6 na východním listu
    • North_Sales - A2:B6 na severním listu
    • South_Sales - A2:B6 na jižním listu
    • West_Sales - A2:B6 na západním listu

    VLOOKUP a vnořené IF

    Pokud máte k dispozici přiměřený počet listů, které chcete vyhledat, můžete použít vnořené funkce IF k výběru listu na základě klíčových slov v předdefinovaných buňkách (v našem případě buňky B1 až D1).

    S vyhledávací hodnotou v A2 je vzorec následující:

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

    Přeloženo do češtiny, část IF zní:

    Pokud je B1 Východní , podívejte se do rozsahu s názvem East_Sales ; pokud B1 je Severní , podívejte se do rozsahu s názvem North_Sales ; pokud B1 je Jižní , podívejte se do rozsahu s názvem South_Sales ; a pokud B1 je West , podívejte se do rozsahu s názvem West_Sales .

    Rozsah vrácený pomocí IF sahá až do table_array VLOOKUP, který vytáhne odpovídající hodnotu z 2. sloupce příslušného listu.

    Chytré použití smíšených odkazů pro vyhledávací hodnotu ($A2 - absolutní sloupec a relativní řádek) a logický test IF (B$1 - relativní sloupec a absolutní řádek) umožňuje kopírovat vzorec do dalších buněk beze změny - Excel automaticky upraví odkazy na základě relativní pozice řádku a sloupce.

    Zadáme tedy vzorec v B2, zkopírujeme jej doprava a dolů do tolika sloupců a řádků, kolik potřebujeme, a dostaneme následující výsledek:

    NEPŘÍMÉ VYHLEDÁVÁNÍ

    Při práci s mnoha listy by více vnořených úrovní mohlo způsobit, že vzorec bude příliš dlouhý a nepřehledný. Mnohem lepší je vytvořit vzorec dynamický rozsah vyhledávání s pomocí INDIRECT:

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

    Zde spojíme odkaz na buňku, která obsahuje jedinečnou část pojmenovaného rozsahu (B1), a společnou část (_Sales). Vznikne tak textový řetězec typu "East_Sales", který INDIRECT převede na název rozsahu srozumitelný aplikaci Excel.

    Výsledkem je kompaktní vzorec, který skvěle funguje na libovolném počtu listů:

    To je návod, jak v Excelu provádět Vlookup mezi listy a soubory. Děkuji vám za přečtení a doufám, že se příští týden uvidíme na našem blogu!

    Cvičebnice ke stažení

    Příklady více listů Vlookup (.xlsx soubor)

    Michael Brown je oddaný technologický nadšenec s vášní pro zjednodušování složitých procesů pomocí softwarových nástrojů. S více než desetiletými zkušenostmi v technologickém průmyslu zdokonalil své dovednosti v aplikacích Microsoft Excel a Outlook a také v Tabulkách a Dokumentech Google. Michaelův blog je věnován sdílení jeho znalostí a odborných znalostí s ostatními a poskytuje snadno pochopitelné tipy a návody pro zlepšení produktivity a efektivity. Ať už jste zkušený profesionál nebo začátečník, Michaelův blog nabízí cenné postřehy a praktické rady, jak tyto základní softwarové nástroje co nejlépe využít.