Sisukord
Õpetuses näidatakse, kuidas kasutada funktsiooni VLOOKUP andmete kopeerimiseks teisest töölehest või töövihikust, Vlookup mitmel lehel ja dünaamilise otsingu tegemiseks, et tagastada väärtused erinevatelt lehtedelt erinevatesse lahtritesse.
Kui otsite Excelis mingit teavet, siis on harvad juhud, kui kõik andmed on samal lehel. Sagedamini tuleb otsida mitmel lehel või isegi erinevates töövihikutes. Hea uudis on see, et Microsoft Excel pakub selleks rohkem kui ühte võimalust, ja halb uudis on see, et kõik viisid on veidi keerulisemad kui tavaline VLOOKUP valem. Aga väikese kannatlikkusega saame meleiavad need välja :)
Kuidas VLOOKUP kahe lehe vahel
Alustuseks uurime kõige lihtsamat juhtumit - VLOOKUPi kasutamine andmete kopeerimiseks teiselt töölehelt. See on väga sarnane tavalise VLOOKUPi valemiga, mis otsib samal töölehel. Erinevus seisneb selles, et te lisate lehe nime sisse table_array argument, et öelda oma valemile, millisel töölehel asub otsinguväli.
VLOOKUPi üldine valem teiselt lehelt on järgmine:
VLOOKUP(lookup_value, Sheet!range , col_index_num, [range_lookup])Võtame näitena müüginäitajad järgmisest allikast Jan aruanne Kokkuvõte leht. Selleks määratleme järgmised argumendid:
- Lookup_values on veerus A Kokkuvõte leht ja me viitame esimesele andmerakule, milleks on A2.
- Table_array on vahemik A2:B6 lehel Jan. Sellele viitamiseks tuleb vahemikule viitamise ette kirjutada lehe nimi, millele järgneb hüüumärk: Jan!$A$2:$B$6.
Pöörake tähelepanu sellele, et lukustame vahemiku absoluutsete lahtriviidetega, et vältida selle muutumist valemi kopeerimisel teistesse lahtritesse.
Col_index_num on 2, sest me tahame kopeerida väärtust veerust B, mis on tabeli massiivi 2. veerg.
- Range_lookup on seatud FALSE, et otsida täpset vastet.
Kui panna argumendid kokku, saame järgmise valemi:
=VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)
Lohistage valemit veerus alla ja saate selle tulemuse:
Samamoodi saab Vlookup andmeid Vlookup'ile lisada veebruar ja Mar lehed:
=VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)
=VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)
Näpunäited ja märkused:
- Kui lehe nimi sisaldab ruumid või mitte tähestikulised tähemärgid , tuleb see sulgeda ühekordsete jutumärkide sisse, näiteks 'Jan Müük'!$A$2:$B$6 Lisateavet leiate jaotisest Kuidas viidata teisele lehele Excelis.
- Selle asemel, et sisestada lehe nimi otse valemisse, võite lülituda otsingu töölehele ja valida seal vahemiku. Excel sisestab viite õige süntaksiga automaatselt, säästes teid nime kontrollimisest ja tõrkeotsingust.
Vlookup teisest töövihikust
Kahe töövihiku vahelise VLOOKUPi tegemiseks lisage faili nimi nurksulgudes, millele järgneb lehe nimi ja hüüumärk.
Näiteks, et otsida A2 väärtust vahemikus A2:B6 aadressil Jan leht Müügiaruanded.xlsx töövihik, kasutage seda valemit:
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
Täieliku teabe saamiseks vt VLOOKUP teisest Exceli töövihikust.
Vlookup mitme lehe vahel koos IFERRORiga
Kui on vaja otsida rohkem kui kahe lehe vahel, on kõige lihtsam lahendus kasutada VLOOKUP-i koos IFERROR-iga. Idee on pesitseda mitu IFERROR-funktsiooni, et kontrollida mitu töölehte ükshaaval: kui esimene VLOOKUP ei leia vastet esimesel lehel, otsige järgmisest lehest jne.
IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Ei leitud "))Et näha, kuidas see lähenemine toimib reaalsete andmete puhul, vaatleme järgmist näidet. Järgnevalt on esitatud Kokkuvõte tabel, mida me tahame täita artikli nimede ja summadega, otsides tellimuse numbrit dokumendis Lääne ja Ida lehed:
Kõigepealt tõmbame esemed välja. Selleks anname VLOOKUP valemile korralduse otsida tellimuse numbrit A2-s olevast tabelist Ida leht ja tagastab väärtuse veerust B (2. veerg aastal table_array A2:C6). Kui täpset kokkulangevust ei leita, siis otsi välja Lääne leht. Kui mõlemad Vlookup'id ebaõnnestuvad, tagastage "Ei leitud".
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Ei leitud"))
Summa tagastamiseks tuleb lihtsalt muuta veeru indeksinumber 3:
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Ei leitud"))
Vihje. Vajaduse korral võite määrata erinevate VLOOKUP-funktsioonide jaoks erinevad tabelite massiivid. Selles näites on mõlemal otsingulehel sama arv ridu (A2:C6), kuid teie töölehed võivad olla erineva suurusega.
Vlookup mitmes töövihikus
Vlookup'i tegemiseks kahe või enama töövihiku vahel, sulgege töövihiku nimi nurksulgudesse ja pange see enne lehe nime. Näiteks nii saate Vlookup'i teha järgmises tabelis kaks erinevat faili ( Raamat1 ja Raamat2 ) üheainsa valemiga:
=IFERROR(VLOOKUP(A2, [Book1.xlsx]East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, [Book2.xlsx]West!$A$2:$C$6, 2, FALSE), "Ei leitud"))
Teha veergude indeksi number dünaamiline Vlookup mitu veergu
Olukorras, kus on vaja tagastada andmeid mitmest veerust, on vaja teha col_index_num dünaamika võib teil aega säästa. Tuleb teha mõned kohandused:
- Sest col_index_num argumendiks, kasutage funktsiooni COLUMNS, mis tagastab määratud massiivi veergude arvu: COLUMNS($A$1:B$1). (Rea koordinaat ei ole tegelikult oluline, see võib olla lihtsalt ükskõik milline rida.)
- In the lookup_value argumendiga, lukustage veeru viide $-märgiga ($A2), et see jääks fikseerituks, kui kopeerite valemit teistesse veergudesse.
Tulemusena saate omamoodi dünaamilise valemi, mis võtab sobivad väärtused erinevatest veergudest, sõltuvalt sellest, millisesse veergu valemit kopeeritakse:
=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"))
Kui sisestatakse veergu B, siis COLUMNS($A$1:B$1) annab väärtuseks 2, mis ütleb VLOOKUPile, et ta tagastab väärtuse tabeli massiivi 2. veerust.
Kui kopeeritakse veergu C (st te olete lohistanud valemi B2-st C2-sse), muutub B$1 C$1-ks, sest veeru viide on suhteline. Järelikult COLUMNS($A$1:C$1) hindab 3, sundides VLOOKUP-i tagastama väärtust 3. veerust.
See valem töötab suurepäraselt 2 - 3 otsingulehe puhul. Kui teil on rohkem, muutuvad korduvad IFERRORid liiga tülikaks. Järgmine näide näitab veidi keerulisemat, kuid palju elegantsemat lähenemist.
Vlookup mitu lehte INDIRECTiga
Veel üks viis Vlookup'i tegemiseks mitme lehe vahel Excelis on kasutada VLOOKUP ja INDIRECT funktsioonide kombinatsiooni. See meetod nõuab veidi ettevalmistust, kuid lõpuks on teil kompaktsem valem Vlookup'i tegemiseks ükskõik kui paljudes tabelites.
Vlookup'i üldine valem lehtede vahel on järgmine:
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)Kus:
- Lookup_sheets - nimeline vahemik, mis koosneb otsingulehtede nimedest.
- Lookup_value - väärtus, mida otsida.
- Lookup_range - veergude vahemik otsingulehtedes, kust otsinguväärtust otsida.
- Table_array - andmete vahemik otsingulehtedel.
- Col_index_num - tabeli massiivi veeru number, millest väärtus tagastatakse.
Et valem töötaks õigesti, pidage meeles järgmisi hoiatusi:
- See on massiivi valem, mis tuleb täita, vajutades klahve Ctrl + Shift + Enter koos.
- Kõikidel lehtedel peab olema samade veergude järjekord .
- Kuna me kasutame ühte tabeli massiivi kõigi otsingulehtede jaoks, siis täpsustage suurim valik kui teie lehtedel on erinev arv ridu.
Kuidas kasutada valemit Vlookup üle lehede
Mitme lehe üheaegseks vaatamiseks tehke järgmised toimingud:
- Kirjutage kõik otsingulehtede nimed kuhugi oma töövihikusse ja nimetage see vahemik ( Lookup_sheets meie puhul).
- A2 väärtuse otsimine ( lookup_value )
- vahemikus A2:A6 ( lookup_range ) neljal töölehel ( Ida , Põhja , Lõuna ja Lääne ) ja
- tõmmake sobivad väärtused veerust B, mis on veerg 2 ( col_index_num ) andmete vahemikus A2:C6 ( table_array ).
Ülaltoodud argumentide korral võtab valem sellise kuju:
=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)
Pange tähele, et me lukustame mõlemad vahemikud ($A$2:$A$6 ja $A$2:$C$6) absoluutsete lahtriviidetega.
Tulemusena on meil valem, mis otsib tellimuse numbri 4 lehel ja hangib vastava kirje. Kui konkreetset tellimuse numbrit ei leita, kuvatakse #N/A viga nagu reas 14:
Summa tagastamiseks tuleb lihtsalt asendada 2 arvuga 3 lahtris col_index_num argument, kuna summad on tabeli massiivi 3. veerus:
=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)
Kui soovite asendada standardse #N/A veamärkuse oma tekstiga, mähkige valem IFNA-funktsiooni:
=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), "Ei leitud")
Vlookup mitu lehte töövihikute vahel
Seda üldist valemit (või selle mis tahes varianti) saab kasutada ka mitme lehe Vlookup'i jaoks ühes erinev töövihik Selleks ühendage töövihiku nimi INDIRECTi sisse, nagu on näidatud allpool esitatud valemis:
=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), "Ei leitud")
Vlookup lehtede vahel ja mitme veeru tagastamine
Kui soovite tõmmata andmeid mitmest veerust, on võimalik kasutada mitme lahtri massiivi valem saab seda teha ühe käiguga. Sellise valemi loomiseks tuleb anda massiivi konstant jaoks col_index_num argument.
Selles näites soovime tagastada artikli nimed (veerg B) ja summad (veerg C), mis on vastavalt tabeli massiivi 2. ja 3. veerg. Seega on nõutav massiivi {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)
Valemi õigeks sisestamiseks mitmesse lahtrisse tuleb teha järgmist:
- Valige esimeses reas kõik täidetavad lahtrid (meie näites B2:C2).
- Sisestage valem ja vajutage Ctrl + Shift + Enter . See sisestab sama valemi valitud lahtritesse, mis annab igas veerus erineva väärtuse.
- Lohistage valem ülejäänud ridadele.
Kuidas see valem töötab
Loogika paremaks mõistmiseks jaotame selle põhivalemi üksikuteks funktsioonideks:
=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)
Töötades seestpoolt välja, on valem järgmine:
COUNTIF ja INDIRECT
Lühidalt öeldes koostab INDIRECT viited kõikidele otsingulehtedele ja COUNTIF loeb otsinguväärtuse (A2) esinemisi igal lehel:
--(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)
Täpsemalt:
Esmalt liita vahemiku nimi (Lookup_sheets) ja vahemiku viide ($A$2:$A$6), lisades apostrofe ja hüüumärgi õigetes kohtades, et teha väline viide, ning sööda saadud tekstistringi funktsioonile INDIRECT, et dünaamiliselt viidata otsingulehtedele:
INDIRECT({"'Ida'!$A$2:$A$6"; "'Lõuna'!$A$2:$A$6"; "'Põhja'!$A$2:$A$6"; "'Lääne'!$A$2:$A$6"})
COUNTIF kontrollib iga lahtri vahemikus A2:A6 iga otsingulehe iga lahtrit põhilehe A2 väärtuse vastu ja tagastab iga lehe kokkulangevuste arvu. Meie andmestikus on A2 järjekorranumber (101) leitud lehe Lääne leht, mis on 4. nimetatud vahemikus, nii et COUNTIF tagastab selle massiivi:
{0;0;0;1}
Seejärel võrdlete ülaltoodud massiivi iga elementi 0-ga:
--({0; 0; 0; 0; 1}>0)
See annab TRUE (suurem kui 0) ja FALSE (võrdne 0-ga) väärtuste massiivi, mida te sundida 1 ja 0 väärtusteks, kasutades kahekordset unaariumi (--), ja saate tulemuseks järgmise massiivi:
{0; 0; 0; 1}
See operatsioon on täiendav ettevaatusabinõu, et käsitleda olukorda, kus otsinguleht sisaldab mitu otsinguväärtuse esinemist, millisel juhul COUNTIF tagastaks arvu, mis on suurem kui 1, samas kui me tahame, et lõplikus massiivis oleksid ainult 1-d ja 0-d (kohe saate aru, miks).
Pärast kõiki neid teisendusi näeb meie valem välja järgmiselt:
VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)
INDEX ja MATCH
Siinkohal tuleb mängu klassikaline INDEX MATCH kombinatsioon:
INDEX(Lookup_sheets, MATCH(1, {0;0;0;0;1}, 0))
Funktsioon MATCH, mis on konfigureeritud täpseks kokkulangevuseks (0 viimases argumendis), otsib massiivi {0;0;0;0;1} väärtust 1 ja tagastab selle positsiooni, mis on 4:
INDEX(Lookup_sheets, 4)
Funktsioon INDEX kasutab MATCH-i poolt tagastatud arvu rea numbri argumendina (row_num) ja tagastab 4. väärtuse nimetatud vahemikus. Lookup_sheets , mis on Lääne .
Niisiis, valem taandub veelgi:
VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)
VLOOKUP ja INDIRECT
Funktsioon INDIRECT töötleb selles sisalduva tekstistringi:
INDIRECT("'"& "West"&"'!$A$2:$C$6")
Ja teisendab selle viiteks, mis läheb viide table_array VLOOKUPi argument:
VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)
Lõpuks otsib see väga tavaline VLOOKUP-valem A2 väärtust vahemiku A2:C6 esimeses veerus vahemikus A2:C6. Lääne leht ja tagastab vaste 2. veerust. See on kõik!
Dünaamiline VLOOKUP andmete tagastamiseks mitmest lehest erinevatesse lahtritesse
Kõigepealt määratleme, mida täpselt tähendab sõna "dünaamiline" selles kontekstis ja kuidas see valem erineb eelmistest.
Juhul kui teil on suured ühesuguse formaadiga andmeplokid, mis on jaotatud mitmele töölehele, võite soovida eri lehtedelt teavet erinevatesse lahtritesse ekstraheerida. Allpool olev pilt illustreerib seda kontseptsiooni:
Erinevalt eelmistest valemitest, mis said väärtuse konkreetselt lehelt unikaalse identifikaatori alusel, tahame seekord saada väärtusi mitmest lehest korraga.
Selle ülesande jaoks on kaks erinevat lahendust. Mõlemal juhul tuleb teha väike eeltöö ja luua igas otsingulehel olevate andmerakkude jaoks nimelised vahemikud. Selle näite jaoks määratlesime järgmised vahemikud:
- East_Sales - A2:B6 idapoolsel lehel
- North_Sales - A2:B6 põhjapoolsel lehel
- South_Sales - A2:B6 lõunapoolsel lehel
- West_Sales - A2:B6 läänepoolsel lehel
VLOOKUP ja sisseehitatud IF-id
Kui teil on mõistlik arv lehti, mida otsida, saate kasutada sisendatud IF-funktsioone, et valida leht eelnevalt määratud lahtrites (meie puhul lahtrid B1 kuni D1) olevate märksõnade alusel.
Valemi A2 otsinguväärtusega on valem järgmine:
=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)
Inglise keelde tõlgituna kõlab IF osa järgmiselt:
Kui B1 on Ida , vaadake vahemikku nimega East_Sales ; kui B1 on Põhja , vaadake vahemikku nimega North_Sales ; kui B1 on Lõuna , vaadake vahemikku nimega South_Sales ; ja kui B1 on Lääne , vaadake vahemikku nimega West_Sales .
IF-i poolt tagastatud vahemik ulatub table_array VLOOKUP, mis tõmbab sobiva väärtuse vastava lehe 2. veerust.
Segaviidete nutikas kasutamine otsinguväärtuse jaoks ($A2 - absoluutne veerg ja suhteline rida) ja loogiline test IF (B$1 - suhteline veerg ja absoluutne rida) võimaldab valemi kopeerimist teistesse lahtritesse ilma muudatusteta - Excel kohandab viited automaatselt vastavalt rea ja veeru suhtelisele positsioonile.
Seega sisestame valemi B2, kopeerime selle paremale ja alla nii paljudesse veergudesse ja ridadesse kui vaja ning saame järgmise tulemuse:
KAUDNE VLOOKUP
Kui töötate paljude lehtedega, võib mitu üksteise sisseehitatud tasandit muuta valemi liiga pikaks ja raskesti loetavaks. Palju parem viis on luua dünaamiline vlookup vahemik INDIRECTi abil:
=VLOOKUP($A2, INDIRECT(B$1&"_Müük"), 2, FALSE)
Siinkohal liita viide sellisele lahtrisse, mis sisaldab nimetatava vahemiku unikaalset osa (B1) ja ühist osa (_Sales). See annab teksti stringi nagu "East_Sales", mille INDIRECT teisendab Exceli poolt arusaadavaks vahemiku nimeks.
Tulemusena saate kompaktse valemi, mis töötab suurepäraselt mis tahes arvu lehtede peal:
See on, kuidas Vlookup vahel lehed ja failid Excelis. Ma tänan teid lugemise eest ja loodan, et näeme teid meie blogis järgmisel nädalal!
Praktiline töövihik allalaadimiseks
Vlookup mitme lehe näited (.xlsx fail)