Ynhâldsopjefte
De tutorial lit sjen hoe't jo de VLOOKUP-funksje brûke om gegevens te kopiearjen fan in oar wurkblêd of wurkboek, Vlookup yn meardere blêden, en dynamysk opsykje om wearden fan ferskate blêden werom te jaan yn ferskate sellen.
As jo wat ynformaasje sykje yn Excel, is it in seldsum gefal as alle gegevens op itselde blêd binne. Faker moatte jo sykje oer meardere blêden of sels ferskate wurkboeken. It goede nijs is dat Microsoft Excel mear dan ien manier biedt om dit te dwaan, en it minne nijs is dat alle manieren wat komplisearre binne as in standert VLOOKUP-formule. Mar mei mar in bytsje geduld sille wy se útfine :)
Hoe kinne jo VLOOKUP tusken twa blêden
Om te begjinnen, litte wy in ienfâldichste gefal ûndersykje - mei VLOOKUP om kopiearje gegevens fan in oar wurkblêd. It is heul gelyk oan in gewoane VLOOKUP-formule dy't op itselde wurkblêd siket. It ferskil is dat jo de blêdnamme opnimme yn it tabel_array argumint om jo formule te fertellen yn hokker wurkblêd it opsykberik leit.
De generike formule foar VLOOKUP fan in oar blêd is as folget:
VLOOKUP(lookup_value, Sheet!range, col_index_num, [range_lookup])Litte wy as foarbyld de ferkeapsifers fan Jan rapport nei Gearfetting blêd. Hjirfoar definiearje wy de folgjende arguminten:
- Opsykwearden steane yn kolom A op it blêd Gearfetting , en wyVLOOKUP:
VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)
As lêste, dizze heul standert VLOOKUP-formule siket nei de A2-wearde yn 'e earste kolom fan it berik A2:C6 op it blêd West en jout in wedstriid út de 2e kolom. Dat is it!
Dynamyske VLOOKUP om gegevens fan meardere blêden werom te jaan yn ferskate sellen
Litte wy earst definiearje wat it wurd "dynamysk" krekt betsjut yn dizze kontekst en hoe't dizze formule sil wêze oars as de foargeande.
Yn gefal jo grutte stikken gegevens hawwe yn itselde formaat dy't ferdield binne oer meardere spreadsheets, kinne jo ynformaasje fan ferskate blêden ekstrahearje yn ferskate sellen. De ôfbylding hjirûnder yllustrearret it konsept:
Oars as de foarige formules dy't in wearde ophelle út in spesifyk blêd basearre op in unike identifier, dizze kear sykje wy wearden út ferskate blêden op in tiid.
Der binne twa ferskillende oplossings foar dizze taak. Yn beide gefallen moatte jo in bytsje tariedend wurk dwaan en neamde berik meitsje foar gegevenssellen yn elke opsykblêd. Foar dit foarbyld hawwe wy de folgjende berik definieare:
- East_Sales - A2:B6 op it East-blêd
- Noard_Sales - A2: B6 op it noardblêd
- Súdferkeap - A2:B6 op it súdblêd
- West_ferkeap - A2:B6 op it Westblêd
VLOOKUP en geneste IF's
As jo in ridlik oantal blêden hawwe om op te sykjen, kinne jo geneste IF-funksjes brûkeom it blêd te selektearjen basearre op de kaaiwurden yn 'e foarôf definieare sellen (sellen B1 oant en mei D1 yn ús gefal).
Mei de opsykwearde yn A2 is de formule folget:
=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)
Oerset yn it Ingelsk, it IF-diel lêst:
As B1 East is, sjoch dan yn it berik mei de namme East_Sales ; as B1 Noard is, sjoch dan yn it berik mei de namme Noard_Sales ; as B1 Súd is, sjoch dan yn it berik mei de namme Súd_Sales ; en as B1 West is, sjoch dan yn it berik mei de namme West_Sales .
It berik weromjûn troch IF giet nei tabel_array fan VLOOKUP, dat lûkt in oerienkommende wearde út de 2e kolom op it byhearrende blêd.
It tûke brûken fan mingde referinsjes foar de opsykwearde ($A2 - absolute kolom en relative rige) en de logyske test fan IF (B$1 - relative kolom) en absolute rige) lit it kopiearjen fan de formule nei oare sellen sûnder feroaringen - Excel past de referinsjes automatysk oan op basis fan 'e relative posysje fan in rige en kolom.
Dus, wy fiere de formule yn B2, kopiearje it rjocht en omleech nei safolle kolommen en rigen as nedich, en krije it folgjende resultaat:
INDIREKTE VLOOKUP
As jo wurkje mei in protte blêden, kinne meardere nestele nivo's de formule ek meitsje lang en lestich te lêzen. In folle bettere manier is om in dynamysk vlookup-berik te meitsjen mei help fan INDIRECT:
=VLOOKUP($A2, INDIRECT(B$1&"_Sales"), 2, FALSE)
Hjir ferbine wy de ferwizing nei de sel dy't inunyk diel fan it neamde berik (B1) en it mienskiplike diel (_Sales). Dit produsearret in tekststring lykas "East_Sales", dy't INDIRECT konvertearret nei de beriknamme dy't begryplik is foar Excel.
As resultaat krije jo in kompakte formule dy't prachtich wurket op elk oantal blêden:
Dat is hoe te Vlookup tusken blêden en triemmen yn Excel. Ik tankje jo foar it lêzen en hoopje jo nije wike op ús blog te sjen!
Oefeningswurkboek foar download
Vlookup meardere blêdfoarbylden (.xlsx-bestân)
ferwize nei de earste gegevenssel, dat is A2. - Tabel_array is it berik A2:B6 op it Jan-blêd. Om ernaar te ferwizen, foarheaksel de berikferwizing mei de blêdnamme folge troch it útropteken: Jan!$A$2:$B$6.
Tink derom dat wy it berik beskoattelje mei absolute selferwizings om foar te kommen dat it feroaret by it kopiearjen fan de formule nei oare sellen.
Col_index_num is 2 om't wy in wearde kopiearje wolle út kolom B, dat is de 2e kolom yn de tabel array.
- Range_lookup is ynsteld op FALSE om in eksakte oerienkomst op te sykjen.
Troch de arguminten byinoar te setten, krije wy dizze formule:
=VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)
Sleep de formule nei ûnderen yn 'e kolom en jo krije dit resultaat:
Yn in Op deselde manier kinne jo gegevens opsykje fan 'e blêden febrewaris en mar :
=VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)
=VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)
Tips en notysjes:
- As de blêdnamme spaasjes of net-alfabetyske tekens befettet, moat it omsletten wurde troch inkele oanhalingstekens, lykas 'Jan Ferkeap'!$A$2:$B$6 . Foar mear ynfo, sjoch asjebleaft Hoe kinne jo in oare blêd yn Excel ferwize.
- Ynstee fan in blêdnamme direkt yn in formule te typen, kinne jo oerskeakelje nei it opsykje wurkblêd en dêr it berik selektearje. Excel sil automatysk in referinsje ynfoegje mei de juste syntaksis, wat jo de muoite sparret om de namme te kontrolearjen en problemen op te lossen.
Vlookup út in oar wurkboek
Om VLOOKUP tusken twawurkboeken, befetsje de triemnamme yn fjouwerkante heakjes, folge troch de blêdnamme en it útropteken.
Bygelyks, om te sykjen nei A2 wearde yn it berik A2:B6 op Jan blêd yn it Sales_reports.xlsx wurkboek, brûk dizze formule:
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
Sjoch foar folsleine details VLOOKUP fan in oar wurkboek yn Excel.
Vlookup across meardere blêden mei IFERROR
As jo tusken mear as twa blêden opsykje moatte, is de maklikste oplossing om VLOOKUP te brûken yn kombinaasje mei IFERROR. It idee is om ferskate IFERROR-funksjes te nêsten om meardere wurkblêden ien foar ien te kontrolearjen: as de earste VLOOKUP gjin oerienkomst fynt op it earste blêd, sykje dan yn it folgjende blêd, ensfh.
IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(…), …, " Net fûn "))Om te sjen hoe't dizze oanpak wurket op echte gegevens, litte wy it folgjende foarbyld beskôgje. Hjirûnder is de tabel Gearfetting dy't wy wolle ynfolje mei de itemnammen en bedraggen troch it bestelnûmer op te sykjen yn blêden West en East :
Earst sille wy de items lûke. Hjirfoar jouwe wy de VLOOKUP-formule om te sykjen nei it folchoardernûmer yn A2 op it blêd East en de wearde werom te jaan fan kolom B (2e kolom yn tabel_array A2: C6). As in krekte oerienkomst net fûn is, sykje dan yn it West -blêd. As beide Vlookups mislearje, werom "Net fûn".
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Not found"))
Om it bedrach werom te jaan,feroarje gewoan it kolomyndeksnûmer nei 3:
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Not found"))
Tip. As it nedich is, kinne jo ferskillende tabel arrays oantsjutte foar ferskate VLOOKUP funksjes. Yn dit foarbyld hawwe beide opsykblêden itselde oantal rigen (A2: C6), mar jo wurkblêden kinne ferskille yn grutte.
Vlookup yn meardere wurkboeken
Om te Vlookup tusken twa of mear wurkboeken, omfetsje de wurkboeknamme yn fjouwerkante heakjes en set it foar de blêdnamme. Hjir is bygelyks hoe't jo kinne Vlookup yn twa ferskillende triemmen ( Boek1 en Boek2 ) mei ien formule:
=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"))
Meitsje kolomyndeksnûmer dynamysk foar Vlookup meardere kolommen
Yn situaasje as jo gegevens fan ferskate kolommen werombringe moatte, kin col_index_num dynamysk meitsje jo wat tiid besparje. D'r moatte in pear oanpassings makke wurde:
- Foar it argumint col_index_num , brûk de funksje COLUMNS dy't it oantal kolommen yn in spesifisearre array werombringt: COLUMNS($A$1 :B$1). (De rige koördinaat makket net echt út, it kin gewoan elke rige wêze.)
- Yn it argumint lookup_value , beskoattelje de kolomreferinsje mei it $ teken ($A2), sadat it bliuwt fêst by it kopiearjen fan de formule nei oare kolommen.
As resultaat krije jo in soarte fan dynamyske formule dy't oerienkommende wearden út ferskate kolommen ekstrahearret, ôfhinklik fan hokker kolom de formule kopiearre is:
=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"))
As ynfierd yn kolom B, COLUMNS($A$1:B$1)evaluearret op 2 en fertelt VLOOKUP om in wearde werom te jaan út de 2e kolom yn 'e tabelarray.
As kopiearre nei kolom C (d.w.s. jo hawwe de formule fan B2 nei C2 sleept), feroaret B$1 yn C$1, om't de kolom referinsje is relatyf. Dêrtroch evaluearret COLUMNS($A$1:C$1) nei 3 en twingt VLOOKUP om in wearde werom te jaan út de 3e kolom.
Dizze formule wurket geweldich foar 2 - 3 opsykblêden. As jo mear hawwe, wurde repetitive IFERROR's te omslachtich. It folgjende foarbyld lit in bytsje komplisearre, mar in protte eleganter oanpak sjen.
Vlookup meardere blêden mei INDIRECT
Ien mear manier om te Vlookup tusken meardere blêden yn Excel is in kombinaasje fan VLOOKUP en INDIREKTE funksjes. Dizze metoade freget in bytsje tarieding, mar op it lêst sille jo in kompakter formule hawwe foar Vlookup yn elk oantal spreadsheets.
In generyske formule foar Vlookup oer blêden is as folget:
VLOOKUP( lookup_value , INDIRECT("'"&INDEX( Opsykblêden , MATCH(1, --(COUNTIF(INDIRECT("'" & Opsykblêden & " '! lookup_range "), lookup_value )>0), 0)) & "'! tabel_array "), col_index_num , FALSE)Wêr:
- Opsykblêden - in beneamd berik besteande út de nammen fan opsykblêden.
- Opsykblêdwizer - de wearde om nei te sykjen.
- Opsykberik - it kolomberik yn 'e opsykblêden wêr't nei it opsykjen sykje moatwearde.
- Tabel_array - it gegevensberik yn 'e opsykblêden.
- Col_index_num - it nûmer fan 'e kolom yn 'e tabelarray wêrfan jout in wearde werom.
Om de formule goed te wurkjen, hâld asjebleaft de folgjende warskôgings yn gedachten:
- It is in arrayformule, dy't foltôge wurde moat troch te drukken op Ctrl + Shift + Enter toetsen tegearre.
- Alle blêden moatte de deselde folchoarder fan kolommen hawwe.
- Om't wy ien tabelarray brûke foar alle opsykblêden, spesifisearje de grutste berik as jo blêden ferskillende oantallen rigen hawwe.
Hoe kinne jo de formule brûke foar Vlookup oer blêden
Om meardere blêden tagelyk te Vlookup, útfiere dizze stappen:
- Skriuw alle opsykblêdnammen earne yn jo wurkboek op en neam dat berik ( Opsykblêden yn ús gefal).
- sykje nei A2-wearde ( lookup_value )
- yn it berik A2:A6 ( lookup_range ) yn fjouwer wurkblêden ( East , Noard , Súd en West ), en
- lûke oerienkommende wearden út kolom B, dat is kolom 2 ( col_index_num ) yn it gegevensberik A2:C6 ( tabel_array ).
Mei de boppesteande arguminten nimt de formule dizze foarm oan:
=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)
Tink derom dat wy beide berik ($A$2:$A$6 en $A$2:$C$6) beskoattelje mei absolute selferwizings.
As de resultaat, wy hawwe de formule om it bestelnûmer op te sykjen yn 4 blêden en it oerienkommende item op te heljen. As in spesifyk bestelnûmer net fûn wurdt, wurdt in #N/A-flater werjûn lykas yn rige 14:
Om it bedrach werom te jaan, ferfange gewoan 2 troch 3 yn it col_index_num argumint as bedraggen binne yn 'e 3e kolom fan' e tabel array:
=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)
As jo de standert #N/A flater notaasje ferfange wolle troch jo eigen tekst, wrap dan de formule yn 'e IFNA-funksje:
=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")
Meardere blêden opsykje tusken wurkboeken
Dizze generike formule (of elke fariaasje dêrfan) kin ek brûkt wurde om meardere blêden te Vlookup yn in oare wurkboek . Ferbine hjirfoar de namme fan it wurkboek yn INDIRECT lykas werjûn yn 'e ûndersteande formule:
=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 tusken blêden en werom meardere kolommen
As jo gegevens fan ferskate wolle lûke kolommen, kin in multi-sel-arrayformule dat yn ien kear dwaan. Om sa'n formule te meitsjen, leverje in arraykonstante foar it argumint col_index_num .
Yn dit foarbyld wolle wy de itemnammen (kolom B) en bedraggen (kolom C) weromjaan, wat binne respektivelik de 2e en 3e kolom yn 'e tabelarray. Dat, de fereaske array is{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)
Om de formule korrekt yn meardere sellen yn te fieren, is dit wat jo moatte dwaan:
- Yn de earste rige, selektearje alle sellen dy't befolke wurde (B2:C2 yn ús foarbyld).
- Typ de formule en druk op Ctrl + Shift + Enter. Dit fiert deselde formule yn de selektearre sellen, dy't sil weromjaan in oare wearde yn eltse kolom.
- Sleep de formule nei de oerbleaune rigen.
Hoe't dizze formule wurket
Om de logika better te begripen, litte wy dizze basisformule ôfbrekke nei de yndividuele funksjes:
=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)
Wurch fan binnen nei bûten, hjir is wat de formule docht:
COUNTIF en INDIRECT
Yn in notedop bout INDIRECT de ferwizings foar alle opsykblêden, en COUNTIF telt it foarkommen fan it opsykjen wearde (A2) yn elk blêd:
--(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)
Yn mear detail:
Earst ferbine jo de beriknamme (Lookup_sheets) en de berikreferinsje ($A$2: $A$6), it tafoegjen fan apostrof en it útropteken op de juste plakken om in eksterne ferwizing te meitsjen, en de resultearjende tekststring nei de INDIRECT-funksje fiere om dynamysk te ferwizen nei de opsykblêden:
INDIRECT({"'East'!$A$2:$A$6"; "'South'!$A$2:$A$6"; "'North'!$A$2:$A$6"; "'West'!$A$2:$A$6"})
COUNTIF kontrolearret elke sel yn it berik A2: A6 op elk opsykblêd tsjin de wearde yn A2 op 'e haad blêd en jout it oantal wedstriden foar elk blêd werom. Yn ús dataset is it folchoardernûmer yn A2 (101) te finen yn it West -blêd, dat 4e is yn 'eneamd berik, dus COUNTIF jout dizze rigel werom:
{0;0;0;1}
Dêrnei fergelykje jo elk elemint fan 'e boppesteande rige mei 0:
--({0; 0; 0; 1}>0)
Dit jout in array fan TRUE (grutter as 0) en FALSE (lykas 0) wearden, dy't jo twinge ta 1's en 0's troch in dûbele unary (--) te brûken, en krije de folgjende array as resultaat:
{0; 0; 0; 1}
Dizze operaasje is in ekstra foarsoarchsmaatregel om in situaasje te behanneljen as in opsykblêd ferskate foarfallen fan de opsykwearde befettet, yn dat gefal soe COUNTIF in teller weromjaan dy't grutter is as 1, wylst wy mar 1's en 0's wolle yn 'e finale array (yn in momint sille jo begripe wêrom).
Nei al dizze transformaasjes sjocht ús formule der sa út:
VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)
INDEX en MATCH
Op dit punt stapt in klassike INDEX MATCH-kombinaasje yn:
INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))
De MATCH-funksje konfigurearre foar eksakte oerienkomst (0 yn it lêste argumint) siket nei de wearde 1 yn 'e array { 0;0;0;1} en jout syn posysje werom, dat is 4:
INDEX(Lookup_sheets, 4)
De funksje INDEX brûkt it weromjûne getal troch MATCH as it rigenûmerargumint (row_num), en jout de 4e wearde werom yn it neamde berik Lookup_sheets , dat is West .
Dus, de formule ferminderet fierder nei:
VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)
VLOOKUP en INDIRECT
De funksje INDIRECT ferwurket de tekststring deryn:
INDIRECT("'"&"West"&"'!$A$2:$C$6")
En konvertearret it yn in ferwizing dy't giet nei it tabel_array argumint fan