VLOOKUP över flera ark i Excel med exempel

  • Dela Detta
Michael Brown

I handledningen visas hur du använder VLOOKUP-funktionen för att kopiera data från ett annat kalkylblad eller en annan arbetsbok, Vlookup i flera ark och dynamiskt för att returnera värden från olika ark till olika celler.

När du letar upp information i Excel är det sällan som alla data finns på samma ark. Oftast måste du söka på flera ark eller till och med i olika arbetsböcker. Den goda nyheten är att Microsoft Excel erbjuder mer än ett sätt att göra detta, och den dåliga nyheten är att alla sätt är lite mer komplicerade än en vanlig VLOOKUP-formel. Men med bara lite tålamod kan vikommer att lösa dem :)

    Hur man gör VLOOKUP mellan två ark

    Till att börja med ska vi undersöka det enklaste fallet - att använda VLOOKUP för att kopiera data från ett annat kalkylblad. Det är mycket likt en vanlig VLOOKUP-formel som söker på samma kalkylblad. Skillnaden är att du inkluderar arkets namn i tabell_array argumentet för att tala om för formeln i vilket kalkylblad uppslagsintervallet finns.

    Den generiska formeln för VLOOKUP från ett annat ark är följande:

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

    Som exempel kan vi ta fram försäljningssiffrorna från Jan rapportera till Sammanfattning För detta definierar vi följande argument:

    • Lookup_values står i kolumn A på Sammanfattning och vi hänvisar till den första datacellen, som är A2.
    • Tabell_array är intervallet A2:B6 på bladet Jan. Om du vill hänvisa till det, föregår du intervallreferensen med bladnamnet följt av ett utropstecken: Jan!$A$2:$B$6.

      Observera att vi låser intervallet med absoluta cellreferenser för att förhindra att det ändras när du kopierar formeln till andra celler.

      Col_index_num är 2 eftersom vi vill kopiera ett värde från kolumn B, som är den andra kolumnen i tabellmatrisen.

    • Range_lookup sätts till FALSE för att söka efter en exakt matchning.

    Genom att lägga ihop argumenten får vi denna formel:

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

    Dra formeln nedåt i kolumnen och du får det här resultatet:

    På samma sätt kan du göra en Vlookup av data från Februari och Mar lakan:

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

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

    Tips och anteckningar:

    • Om arkets namn innehåller utrymmen eller . Icke-alfabetiska tecken. måste det omslutas av enkla citattecken, som t.ex. 'Jan Sales'!$A$2:$B$6 Mer information finns i Hur du hänvisar till ett annat ark i Excel.
    • Istället för att skriva in ett arknamn direkt i en formel kan du byta till kalkylbladet och välja intervallet där. Excel infogar automatiskt en referens med rätt syntax, vilket gör att du slipper kontrollera namnet och lösa problem.

    Vlookup från en annan arbetsbok

    Om du vill göra VLOOKUP mellan två arbetsböcker inkluderar du filnamnet inom hakparentes, följt av arknamnet och utropstecknet.

    Om du till exempel vill söka efter A2-värdet i intervallet A2:B6 på Jan bladet i Försäljningsrapporter.xlsx arbetsbok, använd den här formeln:

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

    Mer information finns i VLOOKUP från en annan arbetsbok i Excel.

    Vlookup över flera ark med IFERROR

    När du behöver söka mellan mer än två ark är den enklaste lösningen att använda VLOOKUP i kombination med IFERROR. Tanken är att använda flera IFERROR-funktioner för att kontrollera flera kalkylblad ett efter ett: om den första VLOOKUP-funktionen inte hittar någon matchning på det första arket, sök i nästa ark, och så vidare.

    IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Ej funnen "))

    För att se hur det här tillvägagångssättet fungerar på verkliga data kan vi ta följande exempel. Sammanfattning tabellen som vi vill fylla med artikelnamn och belopp genom att söka upp ordernumret i West och Öst lakan:

    Först ska vi ta fram artiklarna. För detta instruerar vi VLOOKUP-formeln att söka efter beställningsnumret i A2 i Öst ark och återge värdet från kolumn B (andra kolumnen i tabell_array A2:C6). Om en exakt matchning inte hittas, sök då i West ark. Om båda Vlookups misslyckas returnerar du "Not found".

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

    Om du vill returnera beloppet ändrar du bara kolumnindexnumret till 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 det behövs kan du ange olika tabellmatriser för olika VLOOKUP-funktioner. I det här exemplet har de båda uppslagsbladen samma antal rader (A2:C6), men dina kalkylblad kan vara olika stora.

    Vlookup i flera arbetsböcker

    Om du vill göra en Vlookup mellan två eller flera arbetsböcker, omsluter du arbetsboksnamnet inom hakparenteser och sätter det före arknamnet. två olika filer ( Bok1 och Bok2 ) med en enda 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"))

    Gör kolumnindexnumret dynamiskt för att göra Vlookup på flera kolumner

    Om du behöver returnera data från flera kolumner kan du göra en col_index_num Dynamik kan spara dig tid. Det finns ett par justeringar som måste göras:

    • För col_index_num argumentet använder du funktionen COLUMNS som returnerar antalet kolumner i en angiven array: COLUMNS($A$1:B$1). (Radkoordinaten spelar egentligen ingen roll, det kan vara vilken rad som helst.)
    • I Lookup_value argumentet låser du kolumnreferensen med $-tecknet ($A2), så att den förblir fixerad när du kopierar formeln till andra kolumner.

    Resultatet blir en dynamisk formel som hämtar matchande värden från olika kolumner, beroende på vilken kolumn formeln kopieras till:

    =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 det skrivs in i kolumn B utvärderas COLUMNS($A$1:B$1) till 2, vilket innebär att VLOOKUP returnerar ett värde från den andra kolumnen i tabellmatrisen.

    När du kopierar till kolumn C (dvs. du har dragit formeln från B2 till C2) ändras B$1 till C$1 eftersom kolumnreferensen är relativ. Följaktligen blir COLUMNS($A$1:C$1) värdet 3, vilket tvingar VLOOKUP att returnera ett värde från den tredje kolumnen.

    Den här formeln fungerar utmärkt för 2-3 uppslagsblad. Om du har fler blir upprepade IFERRORs för besvärliga. Nästa exempel visar en lite mer komplicerad men mycket elegantare metod.

    Vlookup flera ark med INDIRECT

    Ett annat sätt att göra Vlookup mellan flera ark i Excel är att använda en kombination av funktionerna VLOOKUP och INDIRECT. Den här metoden kräver lite förberedelser, men i slutändan har du en mer kompakt formel för att göra Vlookup i flera kalkylblad.

    En generisk formel för Vlookup mellan ark är följande:

    VLOOKUP( Lookup_value , INDIRECT("'"&INDEX( Lookup_sheets , MATCH(1, --(COUNTIF(INDIRECT("'" & Lookup_sheets & "'! lookup_range "), Lookup_value )>0), 0)) & "'! tabell_array "), col_index_num , FALSE)

    Var:

    • Lookup_sheets - ett namngivet intervall som består av namnen på uppslagsbladen.
    • Lookup_value - det värde som ska sökas.
    • Lookup_range - kolumnområdet i uppslagsbladen där man ska söka efter uppslagsvärdet.
    • Tabell_array - dataområdet i uppslagsbladen.
    • Col_index_num - numret på den kolumn i tabellmatrisen från vilken ett värde ska returneras.

    För att formeln ska fungera korrekt måste du tänka på följande förbehåll:

    • Det är en arrayformel som måste fyllas i genom att trycka på tangenterna Ctrl + Shift + Enter samtidigt.
    • Alla ark måste ha följande egenskaper samma ordning för kolumnerna .
    • Eftersom vi använder en tabellmatris för alla uppslagsblad, anger du största utbudet om arken har olika antal rader.

    Hur du använder formeln för att Vlookup över ark

    Om du vill göra Vlookup på flera ark samtidigt utför du följande steg:

    1. Skriv ner alla namn på uppslagsbladen någonstans i arbetsboken och namnge det området ( Lookup_sheets i vårt fall).

  • Justera den generiska formeln för dina data. I det här exemplet är vi:
    • söker efter A2-värde ( Lookup_value )
    • i intervallet A2:A6 ( lookup_range ) i fyra arbetsblad ( Öst , North , Syd och West ), och
    • drar matchande värden från kolumn B, som är kolumn 2 ( col_index_num ) i dataområdet A2:C6 ( tabell_array ).

    Med ovanstående argument får formeln följande 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)

    Observera att vi låser båda områdena ($A$2:$A$6 och $A$2:$C$6) med absoluta cellreferenser.

  • Skriv in formeln i den översta cellen (B2 i det här exemplet) och tryck på Ctrl + Shift + Enter för att slutföra den.
  • Dubbelklicka eller dra i fyllningshandtaget för att kopiera formeln nedåt i kolumnen.
  • Resultatet är att vi har en formel som söker upp ordernumret i fyra ark och hämtar motsvarande artikel. Om ett visst ordernummer inte hittas visas ett #N/A-fel som i rad 14:

    För att återge beloppet ersätter du 2 med 3 i col_index_num argumentet, eftersom beloppen finns i den tredje kolumnen 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)

    Om du vill ersätta den vanliga felnoteringen #N/A med din egen text kan du slå in formeln 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), "Not found")

    Vlookup flera ark mellan arbetsböcker

    Den här generiska formeln (eller dess variant) kan också användas för att Vlookup flera blad i en olika arbetsböcker För att göra detta, sammanfoga arbetsboksnamnet i INDIRECT på det sätt som visas i formeln nedan:

    =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 mellan ark och återge flera kolumner

    Om du vill hämta data från flera kolumner kan du använda en formel för en flercellig matris kan göra det i ett svep. För att skapa en sådan formel anger du en arraykonstant för col_index_num argument.

    I det här exemplet vill vi returnera artikelnamnen (kolumn B) och beloppen (kolumn C), som är den andra respektive tredje kolumnen i tabellmatrisen. Den nödvändiga matrisen är alltså {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)

    Så här gör du för att skriva in formeln korrekt i flera celler:

    • I den första raden markerar du alla celler som ska fyllas i (B2:C2 i vårt exempel).
    • Skriv formeln och tryck på Ctrl + Shift + Enter . På så sätt skrivs samma formel in i de markerade cellerna, vilket ger ett annat värde i varje kolumn.
    • Dra ner formeln till de återstående raderna.

    Hur denna formel fungerar

    För att bättre förstå logiken kan vi dela upp denna grundläggande formel i enskilda 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)

    Här är vad formeln gör när den arbetar inifrån och ut:

    COUNTIF och INDIRECT

    INDIRECT bygger upp referenser för alla uppslagsblad och COUNTIF räknar förekomsterna av uppslagsvärdet (A2) i varje blad:

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

    Mer detaljerat:

    Först sammanfogar du intervallnamnet (Lookup_sheets) och intervallreferensen ($A$2:$A$6), lägger till apostrofer och utropstecken på rätt ställen för att skapa en extern referens, och matar den resulterande textsträngen till INDIRECT-funktionen för att dynamiskt hänvisa till uppslagsbladen:

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

    COUNTIF kontrollerar varje cell i intervallet A2:A6 på varje uppslagsblad mot värdet i A2 på huvudbladet och returnerar antalet matchningar för varje blad. I vårt dataset finns beställningsnumret i A2 (101) i West som är den fjärde i det angivna intervallet, så COUNTIF returnerar denna matris:

    {0;0;0;1}

    Därefter jämför du varje element i den ovanstående matrisen med 0:

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

    Detta ger en matris med TRUE-värden (större än 0) och FALSE-värden (lika med 0), som du omvandlar till 1:or och 0:or med hjälp av en dubbel unary (--), och får följande matris som resultat:

    {0; 0; 0; 1}

    Detta är en extra försiktighetsåtgärd för att hantera en situation där ett uppslagsblad innehåller flera förekomster av uppslagsvärdet, i vilket fall COUNTIF skulle ge ett antal större än 1, medan vi bara vill ha 1:or och 0:or i den slutliga matrisen (om en stund kommer du att förstå varför).

    Efter alla dessa omvandlingar ser vår formel ut på följande sätt:

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

    INDEX och MATCH

    Här kommer en klassisk INDEX MATCH-kombination in i bilden:

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

    Funktionen MATCH som är konfigurerad för exakt matchning (0 i det sista argumentet) letar efter värdet 1 i matrisen {0;0;0;0;1} och returnerar dess position, som är 4:

    INDEX(Lookup_sheets, 4)

    INDEX-funktionen använder det nummer som returneras av MATCH som argument för radnumret (row_num) och returnerar det fjärde värdet i det namngivna intervallet. Lookup_sheets , som är West .

    Formeln kan alltså reduceras till:

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

    VLOOKUP och INDIRECT

    INDIRECT-funktionen bearbetar textsträngen inuti den:

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

    och omvandlar den till en referens som går till tabell_array argument för VLOOKUP:

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

    Slutligen söker denna mycket vanliga VLOOKUP-formel efter värdet A2 i den första kolumnen i intervallet A2:C6 på West och returnerar en träff från den andra kolumnen. Så är det!

    Dynamisk VLOOKUP för att returnera data från flera ark till olika celler

    Låt oss först definiera vad ordet "dynamisk" betyder i det här sammanhanget och hur den här formeln kommer att skilja sig från de tidigare.

    Om du har stora datamängder i samma format som är uppdelade på flera kalkylblad kan du vilja extrahera information från olika ark till olika celler. Bilden nedan illustrerar konceptet:

    Till skillnad från de tidigare formlerna som hämtade ett värde från ett specifikt ark baserat på en unik identifierare, vill vi den här gången hämta värden från flera ark samtidigt.

    Det finns två olika lösningar för den här uppgiften. I båda fallen måste du göra lite förberedande arbete och skapa namngivna intervall för dataceller i varje uppslagsblad. I det här exemplet har vi definierat följande intervall:

    • East_Sales - A2:B6 på det östra bladet
    • North_Sales - A2:B6 på det norra bladet
    • South_Sales - A2:B6 på det södra bladet
    • West_Sales - A2:B6 på det västra bladet

    VLOOKUP och inbäddade IF:er

    Om du har ett rimligt antal blad att söka kan du använda inbäddade IF-funktioner för att välja blad baserat på nyckelorden i de fördefinierade cellerna (cellerna B1 till D1 i vårt fall).

    Med uppslagsvärdet i A2 är formeln följande:

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

    Översatt till engelska lyder IF-delen:

    Om B1 är Öst , titta i det område som heter East_Sales ; om B1 är North , titta i det område som heter North_Sales ; om B1 är Syd , titta i det område som heter South_Sales ; och om B1 är West , titta i det område som heter West_Sales .

    Det intervall som återges av IF sträcker sig till tabell_array av VLOOKUP, som hämtar ett matchande värde från den andra kolumnen på motsvarande ark.

    Den smarta användningen av blandade referenser för uppslagsvärdet ($A2 - absolut kolumn och relativ rad) och det logiska testet av IF (B$1 - relativ kolumn och absolut rad) gör det möjligt att kopiera formeln till andra celler utan några ändringar - Excel justerar referenserna automatiskt baserat på den relativa positionen för en rad och kolumn.

    Vi skriver in formeln i B2, kopierar den till höger och ner till så många kolumner och rader som behövs och får följande resultat:

    INDIREKT VLOOKUP

    När du arbetar med många ark kan flera inbäddade nivåer göra formeln för lång och svår att läsa. Ett mycket bättre sätt är att skapa en dynamiskt vlookup-område med hjälp av INDIRECT:

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

    Här sammanfogar vi referensen till cellen som innehåller en unik del av det namngivna intervallet (B1) och den gemensamma delen (_Sales). Detta ger en textsträng som "East_Sales", som INDIRECT omvandlar till ett intervallnamn som Excel förstår.

    Resultatet är en kompakt formula som fungerar utmärkt på ett stort antal ark:

    Så här gör du med Vlookup mellan ark och filer i Excel. Tack för att du läste och hoppas att vi ses på vår blogg nästa vecka!

    Arbetsbok för övning för nedladdning

    Vlookup exempel på flera blad (.xlsx-fil)

    Michael Brown är en hängiven teknikentusiast med en passion för att förenkla komplexa processer med hjälp av mjukvaruverktyg. Med mer än ett decenniums erfarenhet inom teknikbranschen har han finslipat sina kunskaper i Microsoft Excel och Outlook, samt Google Sheets och Docs. Michaels blogg är tillägnad att dela med sig av sin kunskap och expertis med andra, och tillhandahåller lätta att följa tips och handledningar för att förbättra produktiviteten och effektiviteten. Oavsett om du är en erfaren proffs eller nybörjare, erbjuder Michaels blogg värdefulla insikter och praktiska råd för att få ut det mesta av dessa viktiga programvaruverktyg.