VLOOKUP több lapon keresztül az Excelben példákkal

  • Ossza Meg Ezt
Michael Brown

Az oktatóprogram bemutatja, hogyan használhatja a VLOOKUP funkciót adatok másolására egy másik munkalapról vagy munkafüzetből, Vlookup több lapon, és dinamikus keresésre, hogy különböző lapok értékeit különböző cellákba adja vissza.

Amikor valamilyen információt keresünk az Excelben, ritka az olyan eset, amikor az összes adat ugyanazon a lapon van. Gyakrabban előfordul, hogy több lapon vagy akár különböző munkafüzetekben kell keresni. A jó hír az, hogy a Microsoft Excel többféle módszert is kínál erre, a rossz hír pedig az, hogy mindegyik mód egy kicsit bonyolultabb, mint egy szabványos VLOOKUP formula. De egy kis türelemmel, mimajd kitaláljuk őket :)

    Hogyan lehet VLOOKUP két lap között

    Kezdetnek vizsgáljuk meg a legegyszerűbb esetet - a VLOOKUP-ot egy másik munkalapról történő adatmásolásra használjuk. Ez nagyon hasonlít a hagyományos VLOOKUP képlethez, amely ugyanazon a munkalapon keres. A különbség az, hogy a lap nevét is belevesszük a táblázatba. table_array argumentummal közölheti a képletével, hogy a keresési tartomány melyik munkalapon található.

    A VLOOKUP általános képlete egy másik lapról a következő:

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

    Példaként vegyük ki az értékesítési adatokat a következőkből Jan jelentés a Összefoglaló Ehhez a következő érveket határozzuk meg:

    • Lookup_values az A oszlopban vannak a Összefoglaló lapot, és az első adatcellára hivatkozunk, amely az A2.
    • Table_array a Jan lap A2:B6 tartománya. A tartományra való hivatkozáshoz a lap nevének előtagja és a felkiáltójel követi: Jan!$A$2:$B$6.

      Kérjük, figyeljen arra, hogy a tartományt abszolút cellahivatkozásokkal rögzítjük, hogy a képlet más cellákba történő másolásakor ne változzon.

      Col_index_num 2, mert egy értéket akarunk másolni a B oszlopból, ami a táblázat tömbjének 2. oszlopa.

    • Range_lookup FALSE értékre van állítva, hogy pontos egyezést keressen.

    Az érveket összerakva a következő képletet kapjuk:

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

    Húzza a képletet lefelé az oszlopban, és ezt az eredményt kapja:

    Hasonló módon, a Vlookup adatokat a Február és Márc lapok:

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

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

    Tippek és megjegyzések:

    • Ha a lap neve tartalmazza a terek vagy nem ábécés karakterek , azt szimpla idézőjelek közé kell tenni, mint pl. 'Jan Sales'!$A$2:$B$6 További információért lásd: Hogyan hivatkozhat egy másik lapra az Excelben.
    • Ahelyett, hogy közvetlenül a képletbe írná be a lap nevét, átkapcsolhat a keresési munkalapra, és ott kiválaszthatja a tartományt. Az Excel automatikusan beilleszti a megfelelő szintaxisú hivatkozást, így megkíméli Önt a név ellenőrzésétől és a hibaelhárítástól.

    Vlookup egy másik munkafüzetből

    Két munkafüzet közötti VLOOKUP-hoz szögletes zárójelben adja meg a fájl nevét, majd a lap nevét és a felkiáltójelet.

    Például az A2 érték keresése az A2:B6 tartományban a következő területen Jan lap a Értékesítési_jelentések.xlsx munkafüzetben ezt a képletet használja:

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

    A teljes részleteket lásd: VLOOKUP egy másik Excel-munkalappal.

    Vlookup több lapon keresztül IFERROR-ral

    Ha kettőnél több lap között kell keresni, a legegyszerűbb megoldás a VLOOKUP és az IFERROR kombinációja. Az ötlet az, hogy több IFERROR függvényt fészkeljünk egymásba, hogy egyenként ellenőrizhessünk több munkalapot: ha az első VLOOKUP nem talál egyezést az első lapon, keressük a következő lapon, és így tovább.

    IFERROR(VLOOKUP(....), IFERROR(VLOOKUP(....), ..., " Nem található "))

    Hogy lássuk, hogyan működik ez a megközelítés a valós adatokon, nézzük meg a következő példát. Az alábbiakban a Összefoglaló táblázatot, amelyet fel akarunk tölteni a tételek nevével és összegével a rendelésszám keresésével a West és Kelet lapok:

    Először is, ki fogjuk húzni a tételeket. Ehhez utasítjuk a VLOOKUP képletet, hogy keresse meg a rendelésszámot az A2-ben a Kelet lapot, és adja vissza a B oszlop értékét (a 2. oszlop a table_array A2:C6). Ha nem találunk pontos egyezést, akkor keressük a West lap. Ha mindkét Vlookup sikertelen, adja vissza a "Nem talált" választ.

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

    Az összeg visszaadásához egyszerűen módosítsa az oszlop indexszámát 3-ra:

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

    Tipp. Szükség esetén különböző táblázatmezők adhatók meg a különböző VLOOKUP függvényekhez. Ebben a példában mindkét keresési lap azonos számú sorral rendelkezik (A2:C6), de a munkalapok mérete eltérő lehet.

    Vlookup több munkafüzetben

    Ha két vagy több munkafüzet között szeretne Vlookupot létrehozni, akkor a munkafüzet nevét szögletes zárójelbe kell tenni, és a lap neve elé kell tenni. Például a következő módon tud Vlookupot létrehozni a két különböző fájl ( Book1 és Book2 ) egyetlen képlettel:

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

    Az oszlopindex számának dinamizálása több oszlop Vlookupjához

    Abban a helyzetben, amikor több oszlopból kell adatokat visszaadni, a col_index_num A dinamika némi időt takaríthat meg. Néhány kiigazítást kell elvégezni:

    • A col_index_num argumentumot, használjuk a COLUMNS függvényt, amely egy megadott tömb oszlopainak számát adja vissza: COLUMNS($A$1:B$1) (A sor koordinátája nem igazán számít, lehet bármilyen sor.).
    • A lookup_value argumentummal zárolja az oszlopreferenciát a $ jellel ($A2), így az fix marad, amikor a képletet más oszlopokba másolja.

    Ennek eredményeként egyfajta dinamikus képletet kapunk, amely különböző oszlopokból vonja ki a megfelelő értékeket, attól függően, hogy a képletet melyik oszlopba másoljuk:

    =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 B oszlopba történő beíráskor a COLUMNS($A$1:B$1) értéke 2, ami azt mondja a VLOOKUP-nak, hogy a táblázat tömbjének 2. oszlopából adja vissza az értéket.

    Amikor a C oszlopba másoljuk (azaz a képletet B2-ből C2-be húztuk), a B$1 C$1-re változik, mivel az oszlophivatkozás relatív. Következésképpen a COLUMNS($A$1:C$1) értéke 3, ami arra kényszeríti a VLOOKUP-ot, hogy a 3. oszlopból adjon vissza értéket.

    Ez a képlet 2-3 keresési lap esetén nagyszerűen működik. Ha több van, az ismétlődő IFERROR-ok túl nehézkessé válnak. A következő példa egy kicsit bonyolultabb, de sokkal elegánsabb megközelítést mutat be.

    Vlookup több lap INDIRECT segítségével

    Az Excelben a több lap közötti Vlookup még egy módja a VLOOKUP és az INDIRECT függvények kombinációjának használata. Ez a módszer egy kis előkészületet igényel, de végül egy sokkal kompaktabb képletet kap a Vlookuphoz, amelyet tetszőleges számú táblázatkezelőben használhat.

    A lapok közötti Vlookup általános képlete a következő:

    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)

    Hol:

    • Lookup_sheets - a keresőlapok nevéből álló névleges tartomány.
    • Lookup_value - a keresendő érték.
    • Lookup_range - a keresési lapok oszloptartománya, ahol a keresési értéket keresni kell.
    • Table_array - az adattartományt a keresési lapokon.
    • Col_index_num - annak az oszlopnak a száma a táblázat tömbjében, amelyből az értéket vissza kell adni.

    Ahhoz, hogy a képlet megfelelően működjön, kérjük, tartsa szem előtt a következő figyelmeztetéseket:

    • Ez egy tömbképlet, amelyet a Ctrl + Shift + Enter billentyűk együttes lenyomásával kell kitölteni.
    • Minden lapnak rendelkeznie kell a az oszlopok azonos sorrendje .
    • Mivel minden keresőlaphoz egy táblázattömböt használunk, adjuk meg a legnagyobb választék ha a lapok különböző számú sorokkal rendelkeznek.

    Hogyan használjuk a képletet a Vlookup lapok közötti Vlookuphoz?

    Ha egyszerre több lapot szeretne kinézni, végezze el a következő lépéseket:

    1. Írja le az összes keresési lap nevét valahol a munkafüzetben, és nevezze el ezt a tartományt ( Lookup_sheets a mi esetünkben).

  • Állítsa be az általános képletet az adataihoz. Ebben a példában mi leszünk:
    • A2 érték keresése ( lookup_value )
    • az A2:A6 tartományban ( lookup_range ) négy munkalapon ( Kelet , Észak , Dél és West ), és
    • a B oszlopból, azaz a 2. oszlopból ( col_index_num ) az A2:C6 adattartományban ( table_array ).

    A fenti érvekkel a képlet a következő formát ölti:

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

    Vegye észre, hogy mindkét tartományt ($A$2:$A$6 és $A$2:$C$6) abszolút cellahivatkozásokkal rögzítjük.

  • Írja be a képletet a legfelső cellába (ebben a példában B2), és nyomja meg a Ctrl + Shift + Enter billentyűkombinációt a befejezéshez.
  • Kattintson duplán vagy húzza a kitöltési fogantyút a képletnek az oszlopba történő másolásához.
  • Ennek eredményeként megkaptuk a képletet, amely 4 lapon keresi a rendelésszámot, és lekérdezi a megfelelő tételt. Ha egy adott rendelésszámot nem találunk, akkor egy #N/A hiba jelenik meg, mint a 14. sorban:

    Az összeg visszaadásához egyszerűen cserélje ki a 2-t 3-ra a col_index_num érv, mivel az összegek a táblázat tömbjének 3. oszlopában vannak:

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

    Ha a szabványos #N/A hiba jelölést saját szöveggel szeretné helyettesíteni, akkor a képletet az IFNA függvénybe csomagolja:

    =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), "Nem található")

    Vlookup több lapot a munkafüzetek között

    Ez az általános képlet (vagy annak bármely változata) használható több lap Vlookup-jára is a más munkafüzet Ehhez kapcsolja össze a munkafüzet nevét az INDIRECT-en belül, ahogy az alábbi képletben látható:

    =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), "Nem található")

    Vlookup lapok között és több oszlop visszatérése

    Ha több oszlopból szeretne adatokat kinyerni, egy többcellás tömb képlet Egy ilyen képlet létrehozásához adjon meg egy tömbi állandót a col_index_num érv.

    Ebben a példában a tételek nevét (B oszlop) és az összegeket (C oszlop) szeretnénk visszaadni, amelyek a táblázat tömbjének 2. és 3. oszlopai. A szükséges tömb tehát {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)

    A képlet több cellába történő helyes beírásához a következőket kell tennie:

    • Az első sorban jelölje ki az összes kitöltendő cellát (példánkban B2:C2).
    • Írja be a képletet, és nyomja meg a Ctrl + Shift + Enter billentyűkombinációt. Ezzel ugyanazt a képletet írja be a kijelölt cellákba, amely minden oszlopban más értéket ad vissza.
    • Húzza lefelé a képletet a fennmaradó sorokra.

    Hogyan működik ez a képlet

    A logika jobb megértéséhez bontsuk le ezt az alapképletet az egyes függvényekre:

    =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 képlet belülről kifelé haladva a következőket teszi:

    COUNTIF és INDIREKT

    Dióhéjban, az INDIRECT az összes keresési lapra vonatkozó hivatkozást létrehozza, a COUNTIF pedig a keresési érték (A2) előfordulásait számolja az egyes lapokon:

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

    Részletesebben:

    Először is, a tartomány nevét (Lookup_sheets) és a tartomány hivatkozást ($A$2:$A$6) összekapcsolja, a megfelelő helyeken aposztrófokat és felkiáltójelet ad hozzá, hogy külső hivatkozást készítsen, majd az így kapott szöveges karakterláncot az INDIRECT függvénybe táplálja, hogy dinamikusan hivatkozzon a keresési lapokra:

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

    A COUNTIF az A2:A6 tartomány minden egyes kereső lapjának minden egyes celláját összehasonlítja a fő lap A2-es értékével, és minden egyes lapra vonatkozóan visszaadja az egyezések számát. A mi adatállományunkban az A2-ben található sorszámot (101) a West lap, amely a 4. a megnevezett tartományban, így a COUNTIF ezt a tömböt adja vissza:

    {0;0;0;1}

    Ezután a fenti tömb minden elemét összehasonlítjuk a 0-val:

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

    Ez egy TRUE (0-nál nagyobb) és FALSE (0-val egyenlő) értékekből álló tömböt eredményez, amelyeket egy dupla unáris (--) segítségével 1-es és 0-s értékekre kényszerítünk, és a következő tömböt kapjuk eredményként:

    {0; 0; 0; 1}

    Ez a művelet egy extra elővigyázatosság, hogy kezelni tudjuk azt a helyzetet, amikor egy keresési lap a keresési érték több előfordulását tartalmazza, amely esetben a COUNTIF 1-nél nagyobb számot adna vissza, miközben mi csak 1-eseket és 0-akat szeretnénk a végső tömbben (egy pillanat múlva megértjük, miért).

    Mindezen átalakítások után a képletünk a következőképpen néz ki:

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

    INDEX és MATCH

    Ezen a ponton egy klasszikus INDEX MATCH kombináció lép be:

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

    A pontos egyezésre konfigurált MATCH függvény (0 az utolsó argumentumban) az 1-es értéket keresi a {0;0;0;0;1} tömbben, és visszaadja annak pozícióját, ami 4:

    INDEX(Lookup_sheets, 4)

    Az INDEX függvény a MATCH által visszaadott számot használja sorszám argumentumként (row_num), és a megnevezett tartomány 4. értékét adja vissza. Lookup_sheets , ami West .

    A képlet tehát a következőre redukálódik:

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

    VLOOKUP és INDIRECT

    Az INDIRECT függvény feldolgozza a benne lévő szöveges karakterláncot:

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

    És átalakítja egy hivatkozássá, amely a table_array a VLOOKUP argumentuma:

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

    Végül ez a nagyon szabványos VLOOKUP formula az A2 értéket keresi az A2:C6 tartomány első oszlopában az A2:C6 tartományban. West lapot, és visszaad egy egyezést a 2. oszlopból. Ez az!

    Dinamikus VLOOKUP több lapból származó adatok különböző cellákba történő visszaadása érdekében

    Először is, határozzuk meg, hogy mit jelent pontosan a "dinamikus" szó ebben a kontextusban, és miben különbözik ez a formula az előzőektől.

    Abban az esetben, ha nagy mennyiségű, azonos formátumú, több táblázatkezelő lapra elosztott adathalmazzal rendelkezik, előfordulhat, hogy a különböző lapokról különböző cellákba szeretné kivenni az információkat. Az alábbi kép szemlélteti a koncepciót:

    Az előző képletekkel ellentétben, amelyek egy egyedi azonosító alapján egy adott lapról hívtak le egy értéket, ezúttal egyszerre több lapról szeretnénk értékeket kinyerni.

    Erre a feladatra kétféle megoldás létezik. Mindkét esetben egy kis előkészítő munkát kell végezni, és az egyes keresési lapok adatcelláihoz nevesített tartományokat kell létrehozni. Ehhez a példához a következő tartományokat definiáltuk:

    • East_Sales - A2:B6 a keleti lapon
    • North_Sales - A2:B6 az északi lapon
    • South_Sales - A2:B6 a déli lapon
    • West_Sales - A2:B6 a nyugati lapon

    VLOOKUP és beágyazott IF-ek

    Ha ésszerű számú lapot kell keresnie, akkor egymásba ágyazott IF függvényekkel kiválaszthatja a lapot az előre meghatározott cellákban (esetünkben a B1-től D1-ig terjedő cellákban) lévő kulcsszavak alapján.

    Az A2-ben lévő keresési értékkel a képlet a következő:

    =VLOOKUP($A2, IF(B$1="kelet", East_Sales, IF(B$1="észak", North_Sales, IF(B$1="dél", South_Sales, IF(B$1="nyugat", West_Sales)))), 2, FALSE)

    Angolra lefordítva az IF része így szól:

    Ha B1 Kelet , keresse meg a East_Sales ; ha B1 Észak , keresse meg a North_Sales ; ha B1 Dél , keresse meg a South_Sales ; és ha B1 West , keresse meg a West_Sales .

    Az IF által visszaadott tartomány az alábbiakig terjed table_array a VLOOKUP, amely a megfelelő lap 2. oszlopából húzza ki a megfelelő értéket.

    A keresési érték vegyes hivatkozásainak ($A2 - abszolút oszlop és relatív sor) és az IF logikai tesztjének (B$1 - relatív oszlop és abszolút sor) okos használata lehetővé teszi a képlet másolását más cellákba változtatás nélkül - az Excel automatikusan beállítja a hivatkozásokat a sor és az oszlop relatív pozíciója alapján.

    Tehát a képletet beírjuk a B2-be, majd jobbra és lefelé másoljuk annyi oszlopba és sorba, ahány oszlopra és sorra csak szükségünk van, és a következő eredményt kapjuk:

    INDIREKT VLOOKUP

    Ha sok lappal dolgozunk, a több egymásba ágyazott szint túl hosszúvá és nehezen olvashatóvá teheti a képletet. Sokkal jobb megoldás, ha létrehozunk egy dinamikus vlookup tartomány az INDIRECT segítségével:

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

    Itt a megnevezett tartomány egyedi részét (B1) és a közös részt (_Sales) tartalmazó cellára való hivatkozást összekapcsoljuk. Ez egy olyan szöveges karakterláncot eredményez, mint az "East_Sales", amelyet az INDIRECT az Excel által érthető tartománynévvé alakít.

    Ennek eredményeként egy kompakt formulát kap, amely gyönyörűen működik bármilyen számú lapon:

    Így kell Vlookup-ot használni az Excelben a lapok és fájlok között. Köszönöm, hogy elolvastad, és remélem, hogy jövő héten találkozunk a blogon!

    Gyakorlati munkafüzet letölthető

    Vlookup több lap példák (.xlsx fájl)

    Michael Brown elkötelezett technológiai rajongó, aki szenvedélyesen egyszerűsíti a bonyolult folyamatokat szoftvereszközök segítségével. A technológiai iparban szerzett több mint egy évtizedes tapasztalatával a Microsoft Excel és az Outlook, valamint a Google Táblázatok és a Dokumentumok területén fejlesztette tudását. Michael blogja célja, hogy megossza tudását és szakértelmét másokkal, könnyen követhető tippeket és oktatóanyagokat adva a termelékenység és a hatékonyság javításához. Akár tapasztalt szakember, akár kezdő, Michael blogja értékes betekintést és gyakorlati tanácsokat kínál, amelyek segítségével a legtöbbet hozhatja ki ezekből az alapvető szoftvereszközökből.