VLOOKUP på tværs af flere ark i Excel med eksempler

  • Del Dette
Michael Brown

Vejledningen viser, hvordan du bruger VLOOKUP-funktionen til at kopiere data fra et andet regneark eller en anden projektmappe, Vlookup i flere ark og dynamisk opslag for at returnere værdier fra forskellige ark til forskellige celler.

Når du søger efter oplysninger i Excel, er det sjældent, at alle data er på det samme ark. Oftere er du nødt til at søge på tværs af flere ark eller endda forskellige arbejdsmapper. Den gode nyhed er, at Microsoft Excel giver mere end én måde at gøre dette på, og den dårlige nyhed er, at alle måder er lidt mere komplicerede end en standard VLOOKUP-formel. Men med lidt tålmodighed kan vivil finde ud af dem :)

    Sådan VLOOKUP mellem to ark

    Lad os først undersøge det enkleste tilfælde, nemlig at bruge VLOOKUP til at kopiere data fra et andet regneark. Det ligner meget en almindelig VLOOKUP-formel, der søger på det samme regneark. Forskellen er, at du medtager arknavnet i table_array argumentet for at fortælle din formel, i hvilket regneark opslagsrækken er placeret.

    Den generiske formel til VLOOKUP fra et andet ark er som følger:

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

    Lad os som eksempel trække salgstallene fra Jan rapportere til Resumé Til dette formål definerer vi følgende argumenter:

    • Opslag_værdier er i kolonne A på den Resumé ark, og vi henviser til den første datacelle, som er A2.
    • Tabel_array er intervallet A2:B6 på Jan-ark. For at henvise til det skal du sætte arknavnet efterfulgt af et udråbstegn foran intervalreferencen: Jan!$A$2:$B$6.

      Vær opmærksom på, at vi låser området med absolutte cellereferencer for at forhindre, at det ændres, når du kopierer formlen til andre celler.

      Col_index_num er 2, fordi vi ønsker at kopiere en værdi fra kolonne B, som er den anden kolonne i tabellen array.

    • Range_lookup er sat til FALSE for at finde en nøjagtig match.

    Når vi lægger argumenterne sammen, får vi denne formel:

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

    Træk formlen ned i kolonnen, og du får dette resultat:

    På samme måde kan du Vlookup-data fra feb og Mar ark:

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

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

    Tips og noter:

    • Hvis navnet på arket indeholder rum eller ikke-alfabetiske tegn , skal det være omsluttet af anførselstegn, som f.eks. 'Jan Sales'!$A$2:$B$6 Du kan finde flere oplysninger under Sådan henviser du til et andet ark i Excel.
    • I stedet for at skrive et arknavn direkte i en formel kan du skifte til opslagsarket og vælge intervallet der. Excel indsætter automatisk en reference med den korrekte syntaks, så du slipper for at kontrollere navnet og løse problemerne.

    Vlookup fra en anden projektmappe

    Hvis du vil foretage VLOOKUP mellem to arbejdsbøger, skal du angive filnavnet i firkantede parenteser efterfulgt af arknavnet og et udråbstegn.

    Hvis du f.eks. vil søge efter A2-værdien i intervallet A2:B6 på Jan ark i den Salgsrapporter.xlsx arbejdsbog, skal du bruge denne formel:

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

    Du kan finde alle oplysninger i VLOOKUP fra en anden arbejdsbog i Excel.

    Vlookup på tværs af flere ark med IFERROR

    Når du skal søge mellem mere end to ark, er den nemmeste løsning at bruge VLOOKUP i kombination med IFERROR. Idéen er at integrere flere IFERROR-funktioner for at kontrollere flere regneark et efter et: Hvis den første VLOOKUP ikke finder et match på det første ark, skal du søge i det næste ark osv.

    IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Ikke fundet "))

    For at se, hvordan denne fremgangsmåde fungerer på data fra det virkelige liv, kan vi se på følgende eksempel: Nedenfor er Resumé tabel, som vi ønsker at udfylde med varebetegnelser og beløb ved at slå ordrenummeret op i West og Øst ark:

    Først skal vi trække varerne ud. Til dette formål instruerer vi VLOOKUP-formlen til at søge efter ordrenummeret i A2 på Øst ark og returnerer værdien fra kolonne B (2. kolonne i table_array A2:C6). Hvis der ikke findes et nøjagtigt match, skal der søges i West ark. Hvis begge Vlookups mislykkes, returneres "Ikke fundet".

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

    Hvis du vil have beløbet tilbage, skal du blot ændre kolonneindekset til 3:

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

    Tip. Hvis det er nødvendigt, kan du angive forskellige tabelark til forskellige VLOOKUP-funktioner. I dette eksempel har begge opslagsark det samme antal rækker (A2:C6), men dine regneark kan være af forskellig størrelse.

    Vlookup i flere arbejdsbøger

    Hvis du vil foretage et Vlookup mellem to eller flere arbejdsbøger, skal du omslutte arbejdsbogens navn i firkantede parenteser og sætte det foran arknavnet. Sådan kan du f.eks. foretage et Vlookup i to forskellige filer ( Bog1 og Bog2 ) med en enkelt formel:

    =IFERROR(VLOOKUP(A2, [Book1.xlsx]East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, [Book2.xlsx]West!$A$2:$C$6, 2, FALSE), "Ikke fundet"))

    Gør kolonneindeksnummeret dynamisk for at foretage Vlookup på flere kolonner

    I situationer, hvor du har brug for at returnere data fra flere kolonner, kan du gøre col_index_num dynamisk kan spare dig tid. Der skal foretages et par justeringer:

    • For den col_index_num argumentet, skal du bruge funktionen COLUMNS, der returnerer antallet af kolonner i et angivet array: COLUMNS($A$1:B$1). (Rækkekoordinaten er egentlig ligegyldig, det kan være en hvilken som helst række).
    • I den opslagsværdi argumentet låser du kolonnehenvisningen med $-tegnet ($A2), så den forbliver fast, når du kopierer formlen til andre kolonner.

    Resultatet er en slags dynamisk formel, der udtrækker matchende værdier fra forskellige kolonner, afhængigt af hvilken kolonne formlen kopieres til:

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

    Når der indtastes i kolonne B, evalueres COLUMNS($A$1:B$1) til 2, hvilket fortæller VLOOKUP, at den returnerer en værdi fra den anden kolonne i tabelmatrixen.

    Når du kopierer formlen til kolonne C (dvs. du har trukket formlen fra B2 til C2), ændres B$1 til C$1, fordi kolonnehenvisningen er relativ. COLUMNS($A$1:C$1) evalueres derfor til 3, hvilket tvinger VLOOKUP til at returnere en værdi fra den tredje kolonne.

    Denne formel fungerer fint for 2-3 opslagsark. Hvis du har flere, bliver gentagne IFERRORs for besværlige. Det næste eksempel viser en lidt mere kompliceret, men meget mere elegant fremgangsmåde.

    Vlookup flere ark med INDIRECT

    En anden måde at foretage Vlookup mellem flere ark i Excel på er at bruge en kombination af VLOOKUP- og INDIRECT-funktionerne. Denne metode kræver lidt forberedelse, men i sidste ende får du en mere kompakt formel til Vlookup i et hvilket som helst antal regneark.

    En generisk formel til Vlookup på tværs af ark er som følger:

    VLOOKUP( opslagsværdi , INDIRECT("'" &INDEX( Opslag_blade , MATCH(1, --(COUNTIF(INDIRECT("'"" & Opslag_blade & "'! lookup_range "), opslagsværdi )>0), 0)) & "'! table_array "), col_index_num , FALSE)

    Hvor:

    • Opslag_blade - et navngivet område bestående af opslagsarkets navne.
    • Lookup_value - den værdi, der skal søges efter.
    • Opslag_område - det kolonneområde i opslagsarkene, hvor der skal søges efter opslagsværdien.
    • Tabel_array - dataområdet i opslagsarkene.
    • Col_index_num - nummeret på den kolonne i tabelarrayet, hvorfra der skal returneres en værdi.

    For at formlen kan fungere korrekt, skal du være opmærksom på følgende forbehold:

    • Det er en array-formel, som skal udfyldes ved at trykke på tasterne Ctrl + Shift + Enter sammen.
    • Alle ark skal have den samme rækkefølge af kolonnerne .
    • Da vi bruger ét tabelarray til alle opslagsark, skal du angive største rækkevidde hvis dine ark har forskellige antal rækker.

    Sådan bruger du formlen til Vlookup på tværs af ark

    Hvis du vil foretage et Vlookup på flere ark ad gangen, skal du udføre disse trin:

    1. Skriv alle navnene på opslagsarkene ned et sted i din projektmappe, og giv området et navn ( Opslag_blade i vores tilfælde).

  • Tilpas den generiske formel til dine data. I dette eksempel vil vi være:
    • søger efter A2-værdi ( opslagsværdi )
    • i intervallet A2:A6 ( lookup_range ) i fire regneark ( Øst , Nord , Syd og West ), og
    • trække de tilsvarende værdier fra kolonne B, som er kolonne 2 ( col_index_num ) i dataområdet A2:C6 ( table_array ).

    Med ovenstående argumenter får formlen denne form:

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

    Bemærk, at vi låser begge intervaller ($A$2:$A$6 og $A$2:$C$6) med absolutte cellereferencer.

  • Indtast formlen i den øverste celle (B2 i dette eksempel), og tryk på Ctrl + Shift + Enter for at afslutte den.
  • Dobbeltklik eller træk i udfyldningshåndtaget for at kopiere formlen ned i kolonnen.
  • Resultatet er, at vi har fået formlen til at slå ordrenummeret op i 4 ark og hente den tilsvarende vare. Hvis et bestemt ordrenummer ikke kan findes, vises en #N/A-fejl som i række 14:

    For at returnere beløbet skal du blot erstatte 2 med 3 i col_index_num argumentet, da beløbene er i den tredje kolonne i tabellen 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)

    Hvis du ønsker at erstatte standardfejlnotationen #N/A med din egen tekst, skal du indpakke formlen i IFNA-funktionen:

    =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), "Ikke fundet")

    Vlookup flere ark mellem arbejdsbøger

    Denne generiske formel (eller dens variationer) kan også bruges til at foretage Vlookup på flere ark i en anden arbejdsbog For at gøre dette skal du sammenkæde arbejdsbogens navn inden for INDIRECT som vist i nedenstående formel:

    =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 mellem ark og returnerer flere kolonner

    Hvis du vil hente data fra flere kolonner, kan en formel for et flercelligt array kan gøre det på én gang. For at oprette en sådan formel skal du angive en arraykonstant for col_index_num argument.

    I dette eksempel ønsker vi at returnere varenavnene (kolonne B) og beløbene (kolonne C), som er henholdsvis kolonne 2 og 3 i tabelarrayet. Det nødvendige array er derfor {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)

    For at indtaste formlen korrekt i flere celler skal du gøre følgende:

    • I den første række skal du vælge alle de celler, der skal udfyldes (B2:C2 i vores eksempel).
    • Indtast formlen, og tryk på Ctrl + Shift + Enter . Dette indtaster den samme formel i de valgte celler, hvilket vil give en anden værdi i hver kolonne.
    • Træk formlen ned til de resterende rækker.

    Sådan fungerer denne formel

    For bedre at forstå logikken skal vi opdele denne grundlæggende formel i de enkelte funktioner:

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

    Her er, hvad formlen gør, når den arbejder indefra og ud:

    COUNTIF og INDIRECT

    Kort sagt opbygger INDIRECT referencerne for alle opslagsark, og COUNTIF tæller forekomsterne af opslagsværdien (A2) i hvert ark:

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

    Mere detaljeret:

    Først sammenkædes navnet på området (Lookup_sheets) og referenceområdet ($A$2:$A$6), idet du tilføjer apostroffer og udråbstegn de rigtige steder for at lave en ekstern reference, og du sender den resulterende tekststreng til funktionen INDIRECT for dynamisk at henvise til opslagsarkene:

    INDIRECT({"'Øst'!$A$2:$A$6"; "'Syd'!$A$2:$A$6"; "'Nord'!$A$2:$A$6"; "'Vest'!$A$2:$A$6"})

    COUNTIF kontrollerer hver celle i intervallet A2:A6 på hvert opslagsark i forhold til værdien i A2 på hovedarket og returnerer tallet af overensstemmelser for hvert ark. I vores datasæt findes ordrenummeret i A2 (101) i West ark, som er det fjerde i det nævnte område, så COUNTIF returnerer dette array:

    {0;0;0;1}

    Derefter sammenligner du hvert element i ovenstående array med 0:

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

    Dette giver et array af værdierne TRUE (større end 0) og FALSE (lig med 0), som du omdanner til 1'er og 0'er ved hjælp af en dobbelt unary (--), og får følgende array som resultat:

    {0; 0; 0; 1}

    Denne operation er en ekstra sikkerhedsforanstaltning for at håndtere en situation, hvor et opslagsark indeholder flere forekomster af opslagsværdien, i hvilket tilfælde COUNTIF ville returnere et antal større end 1, mens vi kun ønsker 1'er og 0'er i det endelige array (om et øjeblik vil du forstå hvorfor).

    Efter alle disse omdannelser ser vores formel således ud:

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

    INDEX og MATCH

    På dette tidspunkt kommer en klassisk INDEX MATCH-kombination ind i billedet:

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

    MATCH-funktionen, der er konfigureret til nøjagtig match (0 i det sidste argument), leder efter værdien 1 i arrayet {0;0;0;0;1} og returnerer dens position, som er 4:

    INDEX(Opslag_ark, 4)

    INDEX-funktionen bruger det tal, der er returneret af MATCH, som argument for række-nummeret (row_num) og returnerer den fjerde værdi i det navngivne område Opslag_blade , som er West .

    Så formlen reduceres yderligere til:

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

    VLOOKUP og INDIRECT

    INDIRECT-funktionen behandler den tekststreng, der er indeholdt i den:

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

    og konverterer den til en reference, der går til den table_array argumentet i VLOOKUP:

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

    Endelig søger denne meget standard VLOOKUP-formel efter A2-værdien i den første kolonne i intervallet A2:C6 på den West ark og returnerer et match fra den anden kolonne. Det er det!

    Dynamisk VLOOKUP til at returnere data fra flere ark til forskellige celler

    Lad os først og fremmest definere, hvad ordet "dynamisk" betyder i denne sammenhæng, og hvordan denne formel vil være anderledes end de tidligere.

    Hvis du har store datamængder i samme format, som er fordelt på flere regneark, kan du måske udtrække oplysninger fra forskellige ark til forskellige celler. Billedet nedenfor illustrerer konceptet:

    I modsætning til de tidligere formler, der hentede en værdi fra et bestemt ark baseret på en entydig identifikator, skal vi denne gang udtrække værdier fra flere ark ad gangen.

    Der er to forskellige løsninger til denne opgave. I begge tilfælde skal du lave lidt forberedende arbejde og oprette navngivne intervaller for dataceller i hvert opslagsark. I dette eksempel definerede vi følgende intervaller:

    • East_Sales - A2:B6 på det østlige ark
    • North_Sales - A2:B6 på det nordlige ark
    • South_Sales - A2:B6 på det sydlige ark
    • West_Sales - A2:B6 på det vestlige ark

    VLOOKUP og indlejrede IF'er

    Hvis du har et rimeligt antal ark, du skal søge i, kan du bruge indlejrede IF-funktioner til at vælge ark på grundlag af nøgleordene i de foruddefinerede celler (cellerne B1 til D1 i vores tilfælde).

    Med opslagsværdien i A2 er formlen som følger:

    =VLOOKUP($A2, IF(B$1="øst", East_Sales, IF(B$1="nord", North_Sales, IF(B$1="syd", South_Sales, IF(B$1="vest", West_Sales)))), 2, FALSE)

    Oversat til engelsk lyder IF-delen således:

    Hvis B1 er Øst , se i området med navnet East_Sales ; hvis B1 er Nord , se i området med navnet North_Sales ; hvis B1 er Syd , se i området med navnet South_Sales ; og hvis B1 er West , se i området med navnet West_Sales .

    Det område, der returneres af IF, går til table_array af VLOOKUP, som trækker en matchende værdi fra den 2. kolonne på det tilsvarende ark.

    Den smarte brug af blandede referencer for opslagsværdien ($A2 - absolut kolonne og relativ række) og den logiske test af IF (B$1 - relativ kolonne og absolut række) gør det muligt at kopiere formlen til andre celler uden ændringer - Excel justerer automatisk referencerne baseret på den relative position af en række og kolonne.

    Så vi indtaster formlen i B2, kopierer den til højre og nedad til så mange kolonner og rækker som nødvendigt og får følgende resultat:

    INDIREKTE VLOOKUP

    Når du arbejder med mange ark, kan flere indlejrede niveauer gøre formlen for lang og vanskelig at læse. En langt bedre måde er at oprette en dynamisk vlookup-område ved hjælp af INDIRECT:

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

    Her sammenkæder vi referencen til den celle, der indeholder en unik del af det navngivne område (B1) og den fælles del (_Sales). Dette giver en tekststreng som "East_Sales", som INDIRECT konverterer til det område-navn, som Excel forstår.

    Resultatet er en kompakt formel, der fungerer smukt på et hvilket som helst antal ark:

    Sådan laver du Vlookup mellem ark og filer i Excel. Tak fordi du læste med, og jeg håber at se dig på vores blog i næste uge!

    Arbejdsbog til download

    Vlookup flere ark eksempler (.xlsx-fil)

    Michael Brown er en dedikeret teknologientusiast med en passion for at forenkle komplekse processer ved hjælp af softwareværktøjer. Med mere end ti års erfaring i teknologibranchen har han finpudset sine færdigheder i Microsoft Excel og Outlook samt Google Sheets og Docs. Michaels blog er dedikeret til at dele sin viden og ekspertise med andre og giver nemme at følge tips og vejledninger til at forbedre produktiviteten og effektiviteten. Uanset om du er en erfaren professionel eller nybegynder, tilbyder Michaels blog værdifuld indsigt og praktiske råd til at få mest muligt ud af disse vigtige softwareværktøjer.