Inhoudsopgave
De zelfstudie toont hoe u de functie VLOOKUP kunt gebruiken om gegevens uit een ander werkblad of werkmap te kopiëren, te Vlookup-en in meerdere bladen, en dynamisch te zoeken om waarden uit verschillende bladen in verschillende cellen terug te geven.
Bij het opzoeken van informatie in Excel komt het zelden voor dat alle gegevens zich op hetzelfde blad bevinden. Vaker zult u moeten zoeken in meerdere bladen of zelfs verschillende werkmappen. Het goede nieuws is dat Microsoft Excel meer dan één manier biedt om dit te doen, en het slechte nieuws is dat alle manieren een beetje ingewikkelder zijn dan een standaard VLOOKUP-formule. Maar met een beetje geduld kunnen wezal ze uitzoeken :)
Hoe VLOOKUP tussen twee bladen
Laten we om te beginnen het eenvoudigste geval onderzoeken - VLOOKUP gebruiken om gegevens uit een ander werkblad te kopiëren. Het lijkt sterk op een gewone VLOOKUP-formule die op hetzelfde werkblad zoekt. Het verschil is dat u de bladnaam opneemt in het tabel_array argument om uw formule te vertellen in welk werkblad het opzoekbereik zich bevindt.
De algemene formule voor VLOOKUP vanuit een ander blad is als volgt:
VLOOKUP(lookup_value, Blad! reeks , col_index_num, [range_lookup])Laten we als voorbeeld de verkoopcijfers van Jan rapporteren aan Samenvatting laken. Hiervoor definiëren wij de volgende argumenten:
- Lookup_values staan in kolom A op de Samenvatting blad, en we verwijzen naar de eerste gegevenscel, die A2 is.
- Tabel_array is het bereik A2:B6 op het blad Jan. Om ernaar te verwijzen, zet u de verwijzing naar het bereik voorafgegaan door de bladnaam gevolgd door het uitroepteken: Jan!$A$2:$B$6.
Let erop dat we het bereik vergrendelen met absolute celverwijzingen om te voorkomen dat het verandert wanneer de formule naar andere cellen wordt gekopieerd.
Col_index_num is 2 omdat we een waarde willen kopiëren uit kolom B, die de 2e kolom is in de tabel-array.
- Bereik_opzoeken is ingesteld op FALSE om een exacte overeenkomst op te zoeken.
Als we de argumenten samenvoegen, krijgen we deze formule:
=VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)
Sleep de formule naar beneden in de kolom en je krijgt dit resultaat:
Op een vergelijkbare manier kunt u Vlookup gegevens uit de Feb en Mar lakens:
=VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)
=VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)
Tips en opmerkingen:
- Als de bladnaam ruimtes of niet-alfabetische tekens moet het tussen enkele aanhalingstekens staan, zoals "Jan Sales"! $A$2:$B$6 Voor meer informatie, zie Hoe een ander blad te verwijzen in Excel.
- In plaats van een bladnaam rechtstreeks in een formule te typen, kunt u overschakelen naar het opzoekwerkblad en daar het bereik selecteren. Excel voegt dan automatisch een verwijzing met de juiste syntaxis in, zodat u niet de moeite hoeft te nemen om de naam te controleren en problemen op te lossen.
Vlookup vanuit een andere werkmap
Om een VLOOKUP te maken tussen twee werkmappen, zet u de bestandsnaam tussen vierkante haken, gevolgd door de bladnaam en het uitroepteken.
Bijvoorbeeld, om te zoeken naar A2 waarde in het bereik A2:B6 op Jan blad in de Verkoop_rapporten.xlsx werkboek, gebruik deze formule:
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
Zie voor volledige details VLOOKUP vanuit een andere werkmap in Excel.
Vlookup over meerdere bladen met IFERROR
Wanneer u moet opzoeken tussen meer dan twee bladen, is de eenvoudigste oplossing VLOOKUP te gebruiken in combinatie met IFERROR. Het idee is om verschillende IFERROR-functies te nestelen om meerdere werkbladen één voor één te controleren: als de eerste VLOOKUP geen overeenkomst vindt op het eerste blad, zoekt u in het volgende blad, enzovoort.
IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Niet gevonden. "))Om te zien hoe deze aanpak in de praktijk werkt, bekijken we het volgende voorbeeld. Hieronder ziet u de Samenvatting tabel die we willen vullen met de artikelnamen en bedragen door het bestelnummer op te zoeken in West en Oost lakens:
Eerst gaan we de artikelen ophalen. Daartoe geven we de VLOOKUP-formule de opdracht om het bestelnummer in A2 op te zoeken op de Oost blad en geef de waarde terug van kolom B (2e kolom in tabel_array A2:C6). Als er geen exacte overeenkomst wordt gevonden, zoek dan in de West vel. Als beide Vlookups mislukken, geef dan "Niet gevonden" terug.
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Niet gevonden").
Om het bedrag terug te geven, verandert u gewoon het indexnummer van de kolom in 3:
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Niet gevonden").
Tip. Indien nodig kunt u verschillende tabelarrays opgeven voor verschillende VLOOKUP-functies. In dit voorbeeld hebben beide opzoekbladen hetzelfde aantal rijen (A2:C6), maar uw werkbladen kunnen een andere grootte hebben.
Vlookup in meerdere werkmappen
Om te Vlookup-en tussen twee of meer werkmappen, zet u de werkmapnaam tussen vierkante haken en vóór de bladnaam. Zo kunt u bijvoorbeeld Vlookup-en in twee verschillende bestanden ( Boek 1 en Book2 ) met één enkele 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),"Niet gevonden").
Kolomindexnummer dynamisch maken om meerdere kolommen te Vlookup-en
In situaties waarin u gegevens van verschillende kolommen moet retourneren, is het maken van col_index_num dynamiek kan je wat tijd besparen. Er zijn een paar aanpassingen te doen:
- Voor de col_index_num argument, gebruik de functie COLUMNS die het aantal kolommen in een gespecificeerde matrix teruggeeft: COLUMNS($A$1:B$1). (De rijcoördinaat doet er niet echt toe, het kan elke willekeurige rij zijn).
- In de lookup_waarde argument, vergrendel de kolomverwijzing met het $-teken ($A2), zodat deze vast blijft staan wanneer u de formule naar andere kolommen kopieert.
Het resultaat is een soort dynamische formule die passende waarden uit verschillende kolommen haalt, afhankelijk van naar welke kolom de formule wordt gekopieerd:
=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").
Bij invoer in kolom B evalueert COLUMNS($A$1:B$1) naar 2, wat VLOOKUP vertelt een waarde terug te geven uit de tweede kolom in de tabelarray.
Bij het kopiëren naar kolom C (d.w.z. u hebt de formule van B2 naar C2 gesleept) verandert B$1 in C$1 omdat de kolomverwijzing relatief is. Bijgevolg evalueert COLUMNS($A$1:C$1) naar 3 waardoor VLOOKUP een waarde uit de derde kolom moet teruggeven.
Deze formule werkt prima voor 2 - 3 lookup sheets. Als je er meer hebt, worden de herhaalde IFERRORs te omslachtig. Het volgende voorbeeld demonstreert een iets ingewikkelder maar veel elegantere aanpak.
Vlookup meerdere bladen met INDIRECT
Nog een manier om in Excel te Vlookup-en tussen meerdere bladen is het gebruik van een combinatie van de functies VLOOKUP en INDIRECT. Deze methode vergt enige voorbereiding, maar uiteindelijk hebt u een compactere formule om te Vlookup-en in een willekeurig aantal spreadsheets.
Een algemene formule voor Vlookup tussen bladen is als volgt:
VLOOKUP( lookup_waarde , INDIRECT("""&INDEX( Lookup_sheets , MATCH(1, --(COUNTIF(INDIRECT(""" & Lookup_sheets & " lookup_range "), lookup_waarde )>0), 0)) & ''! tabel_array "), col_index_num , FALSE)Waar:
- Lookup_sheets - een genoemd bereik bestaande uit de namen van de opzoekbladen.
- Lookup_value - de waarde waarnaar moet worden gezocht.
- Lookup_range - het kolombereik in de opzoekbladen waar de opzoekwaarde moet worden gezocht.
- Tabel_array - het gegevensbereik in de opzoekbladen.
- Col_index_num - het nummer van de kolom in de tabelarray waaruit een waarde moet worden teruggegeven.
Opdat de formule correct zou werken, moet u rekening houden met de volgende voorbehouden:
- Het is een matrixformule, die moet worden ingevuld door de toetsen Ctrl + Shift + Enter samen in te drukken.
- Alle bladen moeten de dezelfde volgorde van kolommen .
- Omdat we één tabelarray gebruiken voor alle opzoekbladen, moet de grootste assortiment als uw bladen verschillende aantallen rijen hebben.
Hoe gebruik je de formule voor Vlookup over bladen heen?
Voer de volgende stappen uit om meerdere bladen tegelijk op te zoeken:
- Schrijf alle namen van de opzoekbladen ergens in je werkmap op en geef dat bereik een naam ( Lookup_sheets in ons geval).
- zoeken naar A2 waarde ( lookup_waarde )
- in het bereik A2:A6 ( lookup_range ) in vier werkbladen ( Oost , Noord , Zuid en West ), en
- haal passende waarden uit kolom B, dat is kolom 2 ( col_index_num ) in het gegevensbereik A2:C6 ( tabel_array ).
Met bovenstaande argumenten krijgt de formule deze vorm:
=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)
Merk op dat we beide bereiken ($A$2:$A$6 en $A$2:$C$6) vergrendelen met absolute celverwijzingen.
Als resultaat hebben we de formule om het bestelnummer in 4 bladen op te zoeken en het overeenkomstige artikel op te halen. Als een bepaald bestelnummer niet wordt gevonden, verschijnt een #N/A foutmelding zoals in rij 14:
Om het bedrag terug te geven, vervangt u gewoon 2 door 3 in de col_index_num argument als bedragen in de 3e kolom van de tabelrij:
=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)
Als u de standaard #N/A foutnotatie wilt vervangen door uw eigen tekst, wikkelt u de formule in de IFNA-functie:
=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), "Niet gevonden").
Vlookup meerdere bladen tussen werkmappen
Deze algemene formule (of een variatie daarop) kan ook worden gebruikt om meerdere bladen in een ander werkboek Hiervoor moet u de naam van de werkmap aan elkaar koppelen binnen INDIRECT zoals in de onderstaande 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), "Niet gevonden")
Vlookup tussen bladen en meerdere kolommen retourneren
Als u gegevens uit verschillende kolommen wilt halen, kan een formule voor meercellige arrays kan dat in één keer doen. Om zo'n formule te maken, geef je een matrixconstante voor de col_index_num argument.
In dit voorbeeld willen we de artikelnamen (kolom B) en bedragen (kolom C) teruggeven, respectievelijk de 2e en 3e kolom in de tabelarray. De vereiste array is dus {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 correct in meerdere cellen in te voeren, moet u het volgende doen:
- Selecteer in de eerste rij alle cellen die moeten worden ingevuld (B2:C2 in ons voorbeeld).
- Typ de formule en druk op Ctrl + Shift + Enter . Hierdoor wordt dezelfde formule ingevoerd in de geselecteerde cellen, die in elke kolom een andere waarde oplevert.
- Sleep de formule naar de resterende rijen.
Hoe deze formule werkt
Laten we, om de logica beter te begrijpen, deze basisformule uitsplitsen naar de afzonderlijke functies:
=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)
Van binnen naar buiten werkend, is dit wat de formule doet:
COUNTIF en INDIRECT
In een notendop, INDIRECT bouwt de referenties voor alle opzoekbladen, en COUNTIF telt het voorkomen van de opzoekwaarde (A2) in elk blad:
--(COUNTIF( INDIRECT("""&Lookup_sheets&""!$A$2:$A$6"), $A2)>0)
In meer detail:
Eerst voegt u de naam van het bereik (Lookup_sheets) en de verwijzing naar het bereik ($A$2:$A$6) samen, waarbij u op de juiste plaatsen apostrofs en het uitroepteken toevoegt om een externe verwijzing te maken, en u geeft de resulterende tekststring door aan de functie INDIRECT om dynamisch te verwijzen naar de lookup sheets:
INDIRECT({"East"!$A$2:$A$6"; "'South'!$A$2:$A$6"; "'North'!$A$2:$A$6"; "'West'!$A$2:$A$6"})
COUNTIF controleert elke cel in het bereik A2:A6 op elk opzoekblad tegen de waarde in A2 op het hoofdblad en retourneert het aantal overeenkomsten voor elk blad. In onze dataset is het volgnummer in A2 (101) gevonden in het West blad, dat 4e is in het genoemde bereik, dus COUNTIF geeft deze matrix terug:
{0;0;0;1}
Vervolgens vergelijkt u elk element van de bovenstaande matrix met 0:
--({0; 0; 0; 1}>0)
Dit levert een array op van TRUE (groter dan 0) en FALSE (gelijk aan 0) waarden, die u omzet in 1's en 0's door een dubbele unary (--) te gebruiken, en de volgende array als resultaat krijgt:
{0; 0; 0; 1}
Deze bewerking is een extra voorzorgsmaatregel om het hoofd te bieden aan een situatie waarin een lookup sheet meerdere keren voorkomt, in welk geval COUNTIF een telling groter dan 1 zou opleveren, terwijl we alleen 1's en 0's in de uiteindelijke array willen hebben (straks zult u begrijpen waarom).
Na al deze transformaties ziet onze formule er als volgt uit:
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 treedt een klassieke INDEX MATCH combinatie in werking:
INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))
De MATCH functie geconfigureerd voor exacte overeenkomst (0 in het laatste argument) zoekt naar de waarde 1 in de array {0;0;0;1} en retourneert de positie ervan, die 4 is:
INDEX(Lookup_sheets, 4)
De INDEX-functie gebruikt het door MATCH teruggegeven getal als argument voor het rijnummer (row_num), en geeft de 4e waarde in het genoemde bereik terug Lookup_sheets dat is West .
Dus, de formule reduceert verder tot:
VLOOKUP($A2, INDIRECT("""&" West "&""!$A$2:$C$6"), 2, FALSE)
VLOOKUP en INDIRECT
De functie INDIRECT verwerkt de tekststring erin:
INDIRECT("""&"West"&""!$A$2:$C$6")
En zet het om in een referentie die naar de tabel_array argument van VLOOKUP:
VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)
Tenslotte zoekt deze zeer standaard VLOOKUP-formule naar de A2-waarde in de eerste kolom van het bereik A2:C6 op het West en geeft een match van de 2e kolom. Dat is het!
Dynamische VLOOKUP om gegevens van meerdere bladen in verschillende cellen te plaatsen
Laten we eerst definiëren wat het woord "dynamisch" precies betekent in deze context en hoe deze formule zal verschillen van de vorige.
Als u grote brokken gegevens in hetzelfde formaat hebt die over meerdere spreadsheets zijn verdeeld, wilt u misschien informatie uit verschillende bladen in verschillende cellen opnemen. De onderstaande afbeelding illustreert het concept:
In tegenstelling tot de vorige formules waarbij een waarde werd opgehaald uit een specifiek blad op basis van een unieke identificatiecode, willen we nu waarden ophalen uit verschillende bladen tegelijk.
Er zijn twee verschillende oplossingen voor deze taak. In beide gevallen moet u een beetje voorbereidend werk doen en naambereiken maken voor gegevenscellen in elk opzoekblad. Voor dit voorbeeld hebben wij de volgende bereiken gedefinieerd:
- East_Sales - A2:B6 op het oostblad
- North_Sales - A2:B6 op het blad Noord
- South_Sales - A2:B6 op het zuidblad
- West_Sales - A2:B6 op het Westblad
VLOOKUP en geneste IF's
Als u een redelijk aantal op te zoeken bladen hebt, kunt u geneste IF-functies gebruiken om het blad te selecteren op basis van de trefwoorden in de vooraf gedefinieerde cellen (cellen B1 tot en met D1 in ons geval).
Met de opzoekwaarde in A2 is de formule als volgt:
=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)
Vertaald in het Engels luidt het IF-gedeelte:
Als B1 Oost kijk dan in de reeks genaamd East_Sales als B1 is Noord kijk dan in de reeks genaamd North_Sales als B1 is Zuid kijk dan in de reeks genaamd South_Sales en als B1 is West kijk dan in de reeks genaamd West_Sales .
Het door IF geretourneerde bereik gaat tot tabel_array van VLOOKUP, die een overeenkomstige waarde haalt uit de 2e kolom van het overeenkomstige blad.
Door het slimme gebruik van gemengde verwijzingen voor de opzoekwaarde ($A2 - absolute kolom en relatieve rij) en de logische test van IF (B$1 - relatieve kolom en absolute rij) kan de formule naar andere cellen worden gekopieerd zonder wijzigingen - Excel past de verwijzingen automatisch aan op basis van de relatieve positie van een rij en kolom.
We voeren dus de formule in B2 in, kopiëren haar naar rechts en naar beneden naar zoveel kolommen en rijen als nodig, en krijgen het volgende resultaat:
INDIRECTE VLOOKUP
Wanneer u met veel bladen werkt, kunnen meerdere geneste niveaus de formule te lang en moeilijk leesbaar maken. Een veel betere manier is om een dynamisch vlookup-bereik met behulp van INDIRECT:
=VLOOKUP($A2, INDIRECT(B$1&"_Sales"), 2, FALSE)
Hier voegen we de verwijzing naar de cel met het unieke deel van het genoemde bereik (B1) en het gemeenschappelijke deel (_Sales) samen. Dit levert een tekststring op als "East_Sales", die INDIRECT converteert naar de bereiknaam die Excel begrijpt.
Het resultaat is een compacte formule die prachtig werkt op elk aantal bladen:
Dat is hoe je een Vlookup uitvoert tussen bladen en bestanden in Excel. Ik dank u voor het lezen en hoop u volgende week op onze blog te zien!
Praktijk werkboek om te downloaden
Vlookup meerdere bladen voorbeelden (.xlsx bestand)