VLOOKUP på tvers av flere ark i Excel med eksempler

  • Dele Denne
Michael Brown

Opplæringen viser hvordan du bruker VLOOKUP-funksjonen til å kopiere data fra et annet regneark eller arbeidsbok, Vlookup i flere ark, og slå opp dynamisk for å returnere verdier fra forskjellige ark til forskjellige celler.

Når du slår opp noe informasjon i Excel, er det et sjeldent tilfelle når alle dataene er på samme ark. Oftere må du søke på tvers av flere ark eller til og med forskjellige arbeidsbøker. Den gode nyheten er at Microsoft Excel gir mer enn én måte å gjøre dette på, og den dårlige nyheten er at alle måtene er litt mer kompliserte enn en standard VLOOKUP-formel. Men med bare litt tålmodighet finner vi ut av dem :)

    Hvordan VLOOKUP mellom to ark

    For det første, la oss undersøke en enkleste sak – bruk VLOOKUP for å kopiere data fra et annet regneark. Den er veldig lik en vanlig VLOOKUP-formel som søker på samme regneark. Forskjellen er at du inkluderer arknavnet i tabellmatrise -argumentet for å fortelle formelen i hvilket regneark oppslagsområdet er plassert.

    Den generiske formelen til VLOOKUP fra et annet ark er som følger:

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

    La oss som et eksempel trekke salgstallene fra Jan -rapporten til Sammendrag ark. For dette definerer vi følgende argumenter:

    • Lookup_values er i kolonne A på Summary -arket, og viVLOOKUP:

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

      Til slutt søker denne svært standard VLOOKUP-formelen etter A2-verdien i den første kolonnen i området A2:C6 på West -arket og returnerer en match fra 2. kolonne. Det var det!

      Dynamisk VLOOKUP for å returnere data fra flere ark til forskjellige celler

      Først av, la oss definere nøyaktig hva ordet "dynamisk" betyr i denne sammenhengen og hvordan denne formelen kommer til å bli forskjellig fra de forrige.

      Hvis du har store databiter i samme format som er delt over flere regneark, kan det være lurt å trekke ut informasjon fra forskjellige ark til forskjellige celler. Bildet nedenfor illustrerer konseptet:

      I motsetning til de tidligere formlene som hentet en verdi fra et spesifikt ark basert på en unik identifikator, ser vi denne gangen etter å trekke ut verdier fra flere ark på en tid.

      Det er to forskjellige løsninger for denne oppgaven. I begge tilfeller må du gjøre litt forberedende arbeid og lage navngitte områder for dataceller i hvert oppslagsark. For dette eksemplet definerte vi følgende områder:

      • East_Sales - A2:B6 på East-arket
      • North_Sales - A2: B6 på Nord-arket
      • Sør_salg - A2:B6 på Sør-arket
      • West_Sales - A2:B6 på Vest-arket

      VLOOKUP og nestede IF-er

      Hvis du har et rimelig antall ark å slå opp, kan du bruke nestede IF-funksjonerfor å velge arket basert på nøkkelordene i de forhåndsdefinerte cellene (cellene B1 til og med D1 i vårt tilfelle).

      Med oppslagsverdien i A2 er formelen følgende:

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

      Oversatt til engelsk, IF-delen lyder:

      Hvis B1 er Øst , se i området kalt Øst_salg ; hvis B1 er North , se i området kalt North_Sales ; hvis B1 er Sør , se i området kalt Sørsalg ; og hvis B1 er West , se i området kalt West_Sales .

      Rekkevidden returnert av IF går til tabellmatrise i VLOOKUP, som trekker en samsvarende verdi fra den andre kolonnen på det tilsvarende arket.

      Den smarte bruken av blandede referanser for oppslagsverdien ($A2 - absolutt kolonne og relativ rad) og den logiske testen av IF (B$1 - relativ kolonne) og absolutt rad) tillater kopiering av formelen til andre celler uten endringer - Excel justerer referansene automatisk basert på den relative posisjonen til en rad og kolonne.

      Så vi skriver inn formelen i B2, kopierer den til høyre og ned til så mange kolonner og rader som nødvendig, og få følgende resultat:

      INDIREKTE VLOOKUP

      Når du arbeider med mange ark, kan flere nestede nivåer gjøre formelen også lang og vanskelig å lese. En langt bedre måte er å lage et dynamisk vlookup-område ved hjelp av INDIREKTE:

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

      Her setter vi sammen referansen til cellen som inneholder enunik del av det navngitte området (B1) og fellesdelen (_Sales). Dette produserer en tekststreng som "East_Sales", som INDIREKTE konverterer til områdenavnet som forstås av Excel.

      Som et resultat får du en kompakt formel som fungerer vakkert på et hvilket som helst antall ark:

      Slik Vlookup mellom ark og filer i Excel. Jeg takker for at du leste og håper å se deg på bloggen vår neste uke!

      Øvningsarbeidsbok for nedlasting

      Vlookup multiple sheets-eksempler (.xlsx-fil)

      referer til den første datacellen, som er A2.
    • Tabell_array er området A2:B6 på Jan-arket. For å referere til det, prefiks områdereferansen med arknavnet etterfulgt av utropstegnet: Jan!$A$2:$B$6.

      Vær oppmerksom på at vi låser området med absolutte cellereferanser for å forhindre at det endres når formelen kopieres til andre celler.

      Col_index_num er 2 fordi vi ønsker å kopiere en verdi fra kolonne B, som er den andre kolonnen i tabellmatrisen.

    • Range_lookup er satt til FALSE for å slå opp et eksakt samsvar.

    Setter vi sammen argumentene får vi denne formelen:

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

    Dra formelen nedover i kolonnen og du får dette resultatet:

    I en På lignende måte kan du søke opp data fra arkene feb og mars :

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

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

    Tips og merknader:

    • Hvis arknavnet inneholder mellomrom eller ikke-alfabetiske tegn , må det være omgitt av enkle anførselstegn, som 'Jan Sales'!$A$2:$B$6 . For mer informasjon, se Hvordan referere til et annet ark i Excel.
    • I stedet for å skrive et arknavn direkte i en formel, kan du bytte til oppslagsregnearket og velge området der. Excel vil automatisk sette inn en referanse med riktig syntaks, noe som sparer deg for problemer med å sjekke navnet og feilsøke.

    Vlookup fra en annen arbeidsbok

    Til VLOOKUP mellom toarbeidsbøker, ta med filnavnet i hakeparenteser, etterfulgt av arknavnet og utropstegnet.

    For eksempel, for å søke etter A2-verdi i området A2:B6 på Jan ark i Sales_reports.xlsx -arbeidsboken, bruk denne formelen:

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

    For fullstendige detaljer, se VLOOKUP fra en annen arbeidsbok i Excel.

    Vlookup across flere ark med IFERROR

    Når du skal slå opp mellom mer enn to ark, er den enkleste løsningen å bruke VLOOKUP i kombinasjon med IFERROR. Ideen er å neste flere IFERROR-funksjoner for å sjekke flere regneark ett etter ett: hvis det første VLOOKUP ikke finner en treff på det første arket, søk i det neste arket, og så videre.

    IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(…), …, " Ikke funnet "))

    For å se hvordan denne tilnærmingen fungerer på virkelige data, la oss vurdere følgende eksempel. Nedenfor er Sammendrag -tabellen som vi ønsker å fylle ut med varenavn og beløp ved å slå opp ordrenummeret i arkene Vest og Øst :

    Først skal vi trekke gjenstandene. For dette instruerer vi VLOOKUP-formelen om å søke etter ordrenummeret i A2 på Øst -arket og returnere verdien fra kolonne B (2. kolonne i tabellmatrise A2:C6). Hvis et eksakt samsvar ikke blir funnet, søk i Vest -arket. Hvis begge Vlookups mislykkes, returner "Ikke funnet".

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

    For å returnere beløpet,endre ganske enkelt kolonneindeksnummeret til 3:

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

    Tips. Om nødvendig kan du spesifisere forskjellige tabellmatriser for forskjellige VLOOKUP-funksjoner. I dette eksemplet har begge oppslagsarkene samme antall rader (A2:C6), men regnearkene dine kan være forskjellige i størrelse.

    Vlookup i flere arbeidsbøker

    For å Vlookup mellom to eller flere arbeidsbøker, omslutter du arbeidsboknavnet i hakeparenteser og setter det foran arknavnet. For eksempel, her er hvordan du kan Vlookup i to forskjellige filer ( Bok1 og Bok2 ) 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),"Not found"))

    Gjør kolonneindeksnummer dynamisk til Vlookup flere kolonner

    I situasjoner hvor du trenger å returnere data fra flere kolonner, kan det å gjøre col_index_num dynamisk spare deg for litt tid. Det er et par justeringer som må gjøres:

    • For argumentet col_index_num bruker du COLUMNS-funksjonen som returnerer antall kolonner i en spesifisert matrise: COLUMNS($A$1 :B$1). (Radkoordinaten spiller ingen rolle, den kan være hvilken som helst rad.)
    • I lookup_value -argumentet låser du kolonnereferansen med $-tegnet ($A2), slik at den forblir fikset når du kopierer formelen til andre kolonner.

    Som resultat får du en slags dynamisk formel som trekker ut samsvarende verdier fra forskjellige kolonner, avhengig av hvilken kolonne formelen er kopiert 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 angitt i kolonne B, COLUMNS($A$1:B$1)evalueres til 2 og forteller VLOOKUP å returnere en verdi fra den andre kolonnen i tabellmatrisen.

    Når den kopieres til kolonne C (dvs. du har dratt formelen fra B2 til C2), endres B$1 til C$1 fordi kolonnereferansen er relativ. Følgelig evalueres COLUMNS($A$1:C$1) til 3 og tvinger VLOOKUP til å returnere en verdi fra den tredje kolonnen.

    Denne formelen fungerer utmerket for 2 - 3 oppslagsark. Hvis du har flere, blir repeterende IFERRORs for tungvint. Det neste eksemplet viser en litt mer komplisert, men mye mer elegant tilnærming.

    Vlookup flere ark med INDIREKTE

    En annen måte å Vlookup mellom flere ark i Excel er å bruke en kombinasjon av VLOOKUP og INDIREKTE funksjoner. Denne metoden krever litt forberedelse, men til slutt vil du ha en mer kompakt formel til Vlookup i et hvilket som helst antall regneark.

    En generisk formel for Vlookup på tvers av ark er som følger:

    VLOOKUP( oppslagsverdi , INDIREKTE("'"&INDEKS( Oppslagsark , MATCH(1, --(ANTALLHVIS(INDIREKTE("'" & Oppslagsark & " '! oppslagsområde "), oppslagsverdi )>0), 0)) og "'! tabellmatrise "), kolindeksnummer , FALSE)

    Hvor:

    • Oppslagsark - et navngitt område som består av navnene på oppslagsark.
    • Oppslagsverdi - verdi å søke etter.
    • Lookup_range - kolonneområdet i oppslagsarkene hvor det skal søkes etter oppslagetverdi.
    • Tabell_matrise - dataområdet i oppslagsarkene.
    • Col_index_num - nummeret på kolonnen i tabellmatrisen som returner en verdi.

    For at formelen skal fungere riktig, må du huske på følgende forbehold:

    • Det er en matriseformel som må fullføres ved å trykke Ctrl + Shift + Enter-tastene sammen.
    • Alle arkene må ha samme rekkefølge av kolonner .
    • Siden vi bruker én tabellmatrise for alle oppslagsark, spesifiser største rekkevidde hvis arkene dine har forskjellig antall rader.

    Hvordan bruke formelen til å søke på tvers av ark

    For å søke opp flere ark om gangen, utfør disse trinn:

    1. Skriv ned alle navnene på oppslagsarket et sted i arbeidsboken din og navngi det området ( Oppslagsark i vårt tilfelle).

  • Juster den generiske formelen for dataene dine. I dette eksemplet skal vi:
    • søke etter A2-verdi ( oppslagsverdi )
    • i området A2:A6 ( oppslagsområde ) i fire regneark ( Øst , Nord , Sør og Vest ), og
    • trekke samsvarende verdier fra kolonne B, som er kolonne 2 ( col_index_num ) i dataområdet A2:C6 ( table_array ).

    Med argumentene ovenfor har formelen denne formen:

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

    Vær oppmerksom på at vi låser begge områdene ($A$2:$A$6 og $A$2:$C$6) med absolutte cellereferanser.

  • Skriv inn formeli den øverste cellen (B2 i dette eksemplet) og trykk Ctrl + Shift + Enter for å fullføre den.
  • Dobbeltklikk eller dra fyllhåndtaket for å kopiere formelen nedover kolonnen.
  • Som Resultatet har vi formelen for å slå opp ordrenummeret i 4 ark og hente den tilsvarende varen. Hvis et spesifikt ordrenummer ikke blir funnet, vises en #N/A feil som i rad 14:

    For å returnere beløpet, erstatt 2 med 3 i col_index_num argument som beløp er i den tredje kolonnen i tabellmatrisen:

    =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 vil erstatte standard #N/A feilnotasjon med din egen tekst, avbryt formelen inn i IFNA-funksjonen:

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

    Søk opp flere ark mellom arbeidsbøker

    Denne generiske formelen (eller hvilken som helst variant) kan også brukes å Vsøke opp flere ark i en forskjellig arbeidsbok . For dette, slå sammen arbeidsboknavnet inne i INDIREKTE som vist i formelen nedenfor:

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

    Voppslag mellom ark og returner flere kolonner

    Hvis du vil hente data fra flere kolonner, kan en multi-celle matriseformel gjøre det på én gang. For å lage en slik formel, oppgi en matrisekonstant for argumentet col_index_num .

    I dette eksemplet ønsker vi å returnere varenavnene (kolonne B) og beløp (kolonne C), som er henholdsvis 2. og 3. kolonne i tabellmatrisen. Så den nødvendige matrisen er{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 å skrive inn formelen riktig i flere celler, er dette hva du må gjøre:

    • I den første raden, velg alle cellene som skal fylles ut (B2:C2 i vårt eksempel).
    • Skriv inn formelen og trykk Ctrl + Shift + Enter . Dette legger inn den samme formelen i de valgte cellene, som vil returnere en annen verdi i hver kolonne.
    • Dra ned formelen til de gjenværende radene.

    Hvordan denne formelen fungerer

    For bedre å forstå logikken, la oss bryte ned denne grunnleggende formelen til de enkelte funksjonene:

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

    Tjener fra innsiden og ut, her er hva formelen gjør:

    COUNTIF og INDIRECT

    I et nøtteskall bygger INDIRECT referansene for alle oppslagsark, og COUNTIF teller forekomstene av oppslaget verdi (A2) i hvert ark:

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

    Mer detaljert:

    Først setter du sammen områdenavnet (Lookup_sheets) og områdereferansen ($A$2: $A$6), legger til apostrof og utropstegn på de riktige stedene for å lage en ekstern referanse, og mater den resulterende tekststrengen til INDIREKTE-funksjonen for dynamisk å referere til oppslagsarkene:

    INDIRECT({"'East'!$A$2:$A$6"; "'South'!$A$2:$A$6"; "'North'!$A$2:$A$6"; "'West'!$A$2:$A$6"})

    COUNTIF kontrollerer hver celle i området A2:A6 på hvert oppslagsark mot verdien i A2 på hovedsiden ark og returnerer antall kamper for hvert ark. I vårt datasett er ordrenummeret i A2 (101) funnet i West -arket, som er 4. inavngitt område, så COUNTIF returnerer denne matrisen:

    {0;0;0;1}

    Deretter sammenligner du hvert element i ovennevnte matrise med 0:

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

    Dette gir en matrise med TRUE (større enn 0) og FALSE (lik 0) verdier, som du tvinger til 1-er og 0-er ved å bruke en dobbel unær (--), og får følgende matrise som resultat:

    {0; 0; 0; 1}

    Denne operasjonen er en ekstra forholdsregel for å håndtere en situasjon der et oppslagsark inneholder flere forekomster av oppslagsverdien, i så fall vil COUNTIF returnere et antall større enn 1, mens vi bare vil ha 1-er og 0-er i siste array (om et øyeblikk vil du forstå hvorfor).

    Etter alle disse transformasjonene ser formelen vår ut som følger:

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

    INDEX and MATCH

    På dette tidspunktet trer en klassisk INDEX MATCH-kombinasjon inn:

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

    MATCH-funksjonen konfigurert for eksakt samsvar (0 i det siste argumentet) ser etter verdien 1 i matrisen { 0;0;0;1} og returnerer sin posisjon, som er 4:

    INDEX(Lookup_sheets, 4)

    INDEKS-funksjonen bruker tallet som returneres av MATCH som radnummerargumentet (row_num), og returnerer den fjerde verdien i det navngitte området Lookup_sheets , som er West .

    Så, formelen reduserer ytterligere til:

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

    VLOOKUP og INDIREKTE

    InDIREKT-funksjonen behandler tekststrengen i den:

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

    Og konverterer den inn i en referanse som går til tabellmatrise -argumentet til

    Michael Brown er en dedikert teknologientusiast med en lidenskap for å forenkle komplekse prosesser ved hjelp av programvareverktøy. Med mer enn ti års erfaring i teknologibransjen, har han forbedret ferdighetene sine i Microsoft Excel og Outlook, samt Google Sheets og Docs. Michaels blogg er dedikert til å dele sin kunnskap og ekspertise med andre, og gir enkle å følge tips og veiledninger for å forbedre produktivitet og effektivitet. Enten du er en erfaren profesjonell eller nybegynner, tilbyr Michaels blogg verdifull innsikt og praktiske råd for å få mest mulig ut av disse viktige programvareverktøyene.