Kazalo
V učbeniku je prikazana uporaba funkcije VLOOKUP za kopiranje podatkov iz drugega delovnega lista ali delovnega zvezka, Vlookup v več listih in dinamično iskanje za vračanje vrednosti iz različnih listov v različne celice.
Pri iskanju nekaterih informacij v Excelu se redko zgodi, da so vsi podatki na istem listu. Pogosteje boste morali iskati na več listih ali celo v različnih delovnih zvezkih. Dobra novica je, da Microsoft Excel ponuja več načinov za to, slaba pa, da so vsi načini nekoliko bolj zapleteni kot standardna formula VLOOKUP. Toda z malo potrpežljivosti lahkojih bo ugotovil :)
Kako VLOOKUP med dvema listoma
Za začetek si oglejmo najpreprostejši primer - uporabo VLOOKUP za kopiranje podatkov iz drugega delovnega lista. To je zelo podobno običajni formuli VLOOKUP, ki išče v istem delovnem listu. Razlika je v tem, da ime lista vključite v formulo table_array argument, ki vaši formuli pove, v katerem delovnem listu se nahaja območje iskanja.
Splošna formula za VLOOKUP iz drugega lista je naslednja:
VLOOKUP(lookup_value, Razpon listov! , col_index_num, [range_lookup])Kot primer vzemimo podatke o prodaji iz Jan poročati Povzetek Za to opredelimo naslednje argumente:
- Lookup_values so v stolpcu A na Povzetek in se sklicujemo na prvo podatkovno celico, ki je A2.
- Table_array je območje A2:B6 na listu Jan. Če se želite nanj sklicevati, pred sklicem na območje navedite ime lista, ki mu sledi vzklik: Jan!$A$2:$B$6.
Bodite pozorni, da območje zaklenemo z absolutnimi referencami na celice, da se ne bi spremenilo pri kopiranju formule v druge celice.
Col_index_num je 2, ker želimo kopirati vrednost iz stolpca B, ki je drugi stolpec v tabeli.
- Razpon_iskanja nastavi na FALSE, da se poišče natančno ujemanje.
Če argumente združimo, dobimo tole formulo:
=VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)
Povlecite formulo navzdol po stolpcu in dobili boste ta rezultat:
Na podoben način lahko Vlookup podatke iz Feb in . Mar listi:
=VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)
=VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)
Nasveti in opombe:
- Če ime lista vsebuje prostori ali nealfabetski znaki , mora biti v enojnih narekovajih, kot npr. 'Jan Sales'!$A$2:$B$6 Za več informacij glejte Kako se sklicujete na drug list v Excelu.
- Namesto da bi ime lista vnesli neposredno v formulo, lahko preklopite na delovni list za iskanje in tam izberete območje. Excel bo samodejno vstavil sklic s pravilno sintakso, s čimer vam bo prihranil preverjanje imena in odpravljanje težav.
Vlookup iz drugega delovnega zvezka
Če želite VLOOKUP med dvema delovnima zvezkoma, vključite ime datoteke v oglatih oklepajih, ki mu sledita ime lista in vzklikalnik.
Če želite na primer poiskati vrednost A2 v območju A2:B6 na Jan list v Prodajna_poročila.xlsx uporabite to formulo:
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
Za vse podrobnosti glejte VLOOKUP iz druge delovne knjige v Excelu.
Vlookup na več listih z IFERROR
Kadar je treba iskati med več kot dvema listoma, je najlažja rešitev uporaba funkcije VLOOKUP v kombinaciji s funkcijo IFERROR. Ideja je, da se v več funkcij IFERROR ugnezdi več funkcij za preverjanje več delovnih listov enega za drugim: če prva funkcija VLOOKUP ne najde ujemanja na prvem listu, išče v naslednjem listu in tako naprej.
IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Ni bilo najdeno "))Da bi videli, kako ta pristop deluje na resničnih podatkih, si oglejmo naslednji primer. Spodaj je Povzetek tabelo, ki jo želimo napolniti z imeni elementov in zneski, tako da poiščemo številko naročila v West in . Vzhodno listi:
Najprej bomo izvlekli elemente. V ta namen bomo formuli VLOOKUP naročili, naj poišče številko naročila v A2 na Vzhodno in vrnite vrednost iz stolpca B (2. stolpec v table_array A2:C6). Če natančnega ujemanja ne najdete, iščite v West list. Če obe pregledovanji Vlookup nista uspešni, se vrne sporočilo "Ni najden".
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Not found"))
Če želite vrniti znesek, preprosto spremenite številko indeksa stolpca na 3:
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Not found"))
Nasvet. Po potrebi lahko za različne funkcije VLOOKUP določite različna polja tabel. V tem primeru imata oba lista za iskanje enako število vrstic (A2:C6), vendar so lahko vaši delovni listi različno veliki.
Vlookup v več delovnih zvezkih
Če želite Vlookup med dvema ali več delovnimi zvezki, zaprite ime delovnega zvezka v oglate oklepaje in ga postavite pred ime lista. Na primer, tako lahko Vlookup v dve različni datoteki ( Knjiga1 in . Knjiga2 ) z eno samo formulo:
=IFERROR(VLOOKUP(A2, [Book1.xlsx]East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, [Book2.xlsx]West!$A$2:$C$6, 2, FALSE), "Ni najden"))
Naredite številko indeksa stolpca dinamično za Vlookup več stolpcev
Če želite vrniti podatke iz več stolpcev, lahko col_index_num Dinamika vam lahko prihrani nekaj časa. Potrebnih je nekaj prilagoditev:
- Za col_index_num uporabite funkcijo COLUMNS, ki vrne število stolpcev v določenem polju: COLUMNS($A$1:B$1). (Koordinata vrstice ni pomembna, lahko je katerakoli vrstica.)
- V lookup_value zaklenite sklic na stolpec z znakom $ ($A2), tako da ostane nespremenjen pri kopiranju formule v druge stolpce.
Tako dobite nekakšno dinamično formulo, ki iz različnih stolpcev pridobi ustrezne vrednosti, odvisno od tega, v kateri stolpec je formula kopirana:
=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"))
Ko je vnesen v stolpec B, COLUMNS($A$1:B$1) ovrednoti na 2 in pove, da VLOOKUP vrne vrednost iz 2. stolpca v tabeli.
Pri kopiranju v stolpec C (tj. formulo ste prenesli iz B2 v C2) se B$1 spremeni v C$1, ker je referenca na stolpec relativna. Posledično je vrednost COLUMNS($A$1:C$1) enaka 3, zato VLOOKUP vrne vrednost iz tretjega stolpca.
Ta formula se odlično obnese pri 2 do 3 listih za iskanje. Če jih imate več, postanejo ponavljajoče se napake IFERROR preveč okorne. Naslednji primer prikazuje nekoliko bolj zapleten, vendar veliko bolj eleganten pristop.
Vlookup več listov z INDIRECT
Še en način za Vlookup med več listi v Excelu je uporaba kombinacije funkcij VLOOKUP in INDIRECT. Ta metoda zahteva nekaj priprave, vendar boste na koncu imeli bolj kompaktno formulo za Vlookup v poljubnem številu preglednic.
Splošna formula za Vlookup med listi je naslednja:
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)Kje:
- Lookup_sheets - poimenovano območje, sestavljeno iz imen listov iskanja.
- Lookup_value - vrednost za iskanje.
- Lookup_range - obseg stolpcev v preglednicah iskanja, v katerih se išče vrednost iskanja.
- Table_array - podatkovno območje v preglednicah za iskanje.
- Col_index_num - številka stolpca v polju tabele, iz katerega se vrne vrednost.
Za pravilno delovanje formule upoštevajte naslednja opozorila:
- Gre za formulo polja, ki jo je treba dopolniti s pritiskom tipk Ctrl + Shift + Enter skupaj.
- Vsi listi morajo imeti enak vrstni red stolpcev .
- Ker uporabljamo eno tabelsko polje za vse liste za iskanje, določite največji obseg če imajo vaši listi različno število vrstic.
Kako uporabiti formulo za Vlookup v vseh listih
Če želite pregledati več listov hkrati, naredite naslednje korake:
- Nekje v delovnem zvezku zapišite vsa imena listov za iskanje in poimenujte to območje ( Lookup_sheets v našem primeru).
- iskanje vrednosti A2 ( lookup_value )
- v območju A2:A6 ( lookup_range ) v štirih delovnih listih ( Vzhodno , Sever , Južni in . West ) in
- iz stolpca B, ki je stolpec 2, potegnite ustrezne vrednosti ( col_index_num ) v podatkovnem območju A2:C6 ( table_array ).
Z zgornjimi argumenti je formula takšna:
=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)
Opazite, da sta obe območji ($A$2:$A$6 in $A$2:$C$6) zaklenjeni z absolutnimi referencami celic.
Rezultat je formula, ki v 4 listih poišče številko naročila in pridobi ustrezen element. Če določena številka naročila ni najdena, se prikaže napaka #N/A, kot v vrstici 14:
Če želite vrniti znesek, preprosto zamenjajte 2 s 3 v col_index_num kot zneski v tretjem stolpcu tabelaričnega polja:
=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)
Če želite standardni zapis napake #N/A zamenjati z lastnim besedilom, formulo zapakirajte v funkcijo 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), "Ni najden")
Vlookup več listov med delovnimi zvezki
To splošno formulo (ali katero koli njeno različico) lahko uporabite tudi za pregledovanje več listov v drugačen delovni zvezek V ta namen združite ime delovnega zvezka znotraj INDIRECT, kot je prikazano v spodnji formuli:
=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), "Ni najden")
Vlookup med listi in vrnite več stolpcev
Če želite pridobiti podatke iz več stolpcev, lahko formula za večcelično matriko lahko to storite v enem samem koraku. Če želite ustvariti takšno formulo, vnesite konstanto polja za col_index_num argument.
V tem primeru želimo vrniti imena predmetov (stolpec B) in zneske (stolpec C), ki so drugi oziroma tretji stolpec v polju tabele. Potrebno polje je torej {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)
Če želite pravilno vnesti formulo v več celic, morate storiti naslednje:
- V prvi vrstici izberite vse celice, ki jih želite zapolniti (B2:C2 v našem primeru).
- Vnesite formulo in pritisnite kombinacijo tipk Ctrl + Shift + Enter . Tako v izbrane celice vnesete isto formulo, ki bo v vsakem stolpcu vrnila drugačno vrednost.
- Povlecite formulo navzdol v preostale vrstice.
Kako deluje ta formula
Za boljše razumevanje logike razčlenimo to osnovno formulo na posamezne funkcije:
=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)
Formula deluje od znotraj navzven in vsebuje naslednje podatke:
COUNTIF in INDIRECT
Na kratko, INDIRECT ustvari reference za vse liste za iskanje, COUNTIF pa šteje pojavitve vrednosti iskanja (A2) v vsakem listu:
--(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)
Podrobneje:
Najprej združite ime območja (Lookup_sheets) in sklic na območje ($A$2:$A$6) ter na pravih mestih dodajte apostrofe in vzklikalnik, da ustvarite zunanji sklic, in dobljeni besedilni niz podajte funkciji INDIRECT za dinamično sklicevanje na liste iskanja:
INDIRECT({"'East'!$A$2:$A$6"; "'South'!$A$2:$A$6"; "'North'!$A$2:$A$6"; "'West'!$A$2:$A$6"})
COUNTIF preveri vsako celico v območju A2:A6 na vsakem listu za iskanje glede na vrednost v A2 na glavnem listu in vrne število ujemanj za vsak list. V našem naboru podatkov je številka naročila v A2 (101) najdena v West list, ki je četrti v imenovanem območju, zato COUNTIF vrne to polje:
{0;0;0;1}
Nato vsak element zgornjega polja primerjajte z 0:
--({0; 0; 0; 1}>0)
Tako dobimo polje vrednosti TRUE (večje od 0) in FALSE (enake 0), ki jih z uporabo dvojnega enojnika (--) spremenimo v 1 in 0, rezultat pa je naslednje polje:
{0; 0; 0; 1}
Ta operacija je dodaten previdnostni ukrep za primer, ko list za iskanje vsebuje več pojavitev vrednosti iskanja in bi v tem primeru COUNTIF vrnil število, večje od 1, medtem ko želimo v končnem polju samo 1 in 0 (čez trenutek boste razumeli, zakaj).
Po vseh teh pretvorbah je naša formula videti takole:
VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)
INDEX in MATCH
Na tej točki nastopi klasična kombinacija INDEX MATCH:
INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))
Funkcija MATCH, konfigurirana za natančno ujemanje (0 v zadnjem argumentu), išče vrednost 1 v polju {0;0;0;0;1} in vrne njen položaj, ki je 4:
INDEX(Lookup_sheets, 4)
Funkcija INDEX uporabi številko, ki jo je vrnila funkcija MATCH, kot argument za številko vrstice (številka_vrstice) in vrne četrto vrednost v imenovanem območju. Lookup_sheets , ki je West .
Formula se torej nadalje zmanjša na:
VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)
VLOOKUP in INDIRECT
Funkcija INDIRECT obdela besedilni niz, ki je v njej:
INDIRECT("'"& "West"&"'!$A$2:$C$6")
in ga pretvori v referenco, ki se prenese na table_array argument VLOOKUP:
VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)
Končno ta zelo standardna formula VLOOKUP išče vrednost A2 v prvem stolpcu razpona A2:C6 na West in vrne ujemanje iz drugega stolpca. To je to!
Dinamični VLOOKUP za vračanje podatkov iz več listov v različne celice
Najprej opredelimo, kaj točno pomeni beseda "dinamičen" v tem kontekstu in kako se bo ta formula razlikovala od prejšnjih.
Če imate velike dele podatkov v enaki obliki, ki so razdeljeni na več preglednic, boste morda želeli informacije iz različnih preglednic izvleči v različne celice. Spodnja slika ponazarja ta koncept:
V nasprotju s prejšnjimi formulami, ki so na podlagi edinstvenega identifikatorja pridobile vrednost iz določenega lista, želimo tokrat pridobiti vrednosti iz več listov naenkrat.
Za to nalogo obstajata dve različni rešitvi. V obeh primerih morate opraviti nekaj pripravljalnega dela in ustvariti poimenovana območja za podatkovne celice v vsakem listu za iskanje. V tem primeru smo določili naslednja območja:
- East_Sales - A2:B6 na vzhodnem listu
- North_Sales - A2:B6 na severnem listu
- South_Sales - A2:B6 na južnem listu
- West_Sales - A2:B6 na zahodnem listu
VLOOKUP in vgnezdeni IF-i
Če imate na voljo ustrezno število listov, ki jih želite poiskati, lahko uporabite vgnezdene funkcije IF za izbiro lista na podlagi ključnih besed v vnaprej določenih celicah (v našem primeru so to celice od B1 do D1).
Z iskano vrednostjo v A2 je formula naslednja:
=VLOOKUP($A2, IF(B$1="vzhod", East_Sales, IF(B$1="sever", North_Sales, IF(B$1="jug", South_Sales, IF(B$1="zahod", West_Sales)))), 2, FALSE)
V angleščino preveden del IF se glasi:
Če je B1 Vzhodno , poiščite območje z imenom East_Sales ; če je B1 Sever , poiščite območje z imenom North_Sales ; če je B1 Južni , poiščite območje z imenom South_Sales ; in če je B1 West , poiščite območje z imenom West_Sales .
Območje, ki ga vrne IF, sega do table_array VLOOKUP, ki iz 2. stolpca ustreznega lista potegne ustrezno vrednost.
Pametna uporaba mešanih referenc za vrednost iskanja ($A2 - absolutni stolpec in relativna vrstica) in logični preizkus IF (B$1 - relativni stolpec in absolutna vrstica) omogoča kopiranje formule v druge celice brez sprememb - Excel samodejno prilagodi reference glede na relativni položaj vrstice in stolpca.
Tako vnesemo formulo v B2, jo kopiramo desno in navzdol v poljubno število stolpcev in vrstic ter dobimo naslednji rezultat:
POSREDNO ISKANJE
Pri delu z več listi bi lahko zaradi več ugnezdenih ravni formula postala predolga in težko berljiva. Veliko boljši način je, da ustvarite dinamično območje pogleda s pomočjo INDIRECT:
=VLOOKUP($A2, INDIRECT(B$1&"_Sales"), 2, FALSE)
Tu združimo sklic na celico, ki vsebuje edinstveni del poimenovanega območja (B1), in skupni del (_Sales). Tako dobimo besedilni niz, kot je "East_Sales", ki ga INDIRECT pretvori v ime območja, ki ga razume Excel.
Tako dobite kompaktno formulo, ki se odlično obnese na poljubnem številu listov:
To je način za Vlookup med listi in datotekami v Excelu. Zahvaljujem se vam za branje in upam, da se naslednji teden vidimo na našem blogu!
Praktični delovni zvezek za prenos
Primeri Vlookup več listov (.xlsx datoteka)