Avancerad VLOOKUP i Excel: flera, dubbla, inbäddade

  • Dela Detta
Michael Brown

I de här exemplen får du lära dig hur du gör Vlookup med flera kriterier, returnerar en specifik instans eller alla träffar, gör dynamisk Vlookup i flera ark och mycket mer.

Det är den andra delen av serien som hjälper dig att utnyttja kraften i Excel VLOOKUP. Exemplen förutsätter att du vet hur funktionen fungerar. Om inte, är det rimligt att börja med de grundläggande användningsområdena för VLOOKUP i Excel.

Innan vi går vidare vill jag kort påminna om syntaxen:

VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

Nu när alla är på samma sida kan vi ta en närmare titt på de avancerade VLOOKUP-formulärexemplen:

    Hur man Vlookup flera kriterier

    Excel-funktionen VLOOKUP är mycket användbar när det gäller att söka i en databas efter ett visst värde. Den saknar dock en viktig funktion - syntaxen tillåter bara ett uppslagsvärde. Men vad händer om du vill söka med flera villkor? Det finns några olika lösningar för dig att välja mellan.

    Formel 1. VLOOKUP med två kriterier

    Anta att du har en lista med beställningar och vill hitta kvantiteten utifrån två kriterier, Kundnamn och Produkt En komplicerande faktor är att varje kund beställde flera produkter, vilket framgår av tabellen nedan:

    En vanlig VLOOKUP-formel fungerar inte i den här situationen eftersom den returnerar den första hittade matchningen baserat på ett enda uppslagsvärde som du anger.

    För att lösa detta kan du lägga till en hjälpkolumn och sammanfoga värdena från två uppslagskolumner ( Kund och Produkt ) där. Det är viktigt att hjälpkolumnen ska vara den längst till vänster kolumnen i tabellmatrisen eftersom det är där Excel VLOOKUP alltid söker efter uppslagsvärdet.

    Lägg till en kolumn till vänster om din tabell och kopiera nedanstående formel över den kolumnen. Detta kommer att fylla hjälpkolumnen med värdena från kolumnerna B och C (mellanslagstecknet är sammanfogat mellan dem för att förbättra läsbarheten):

    =B2&" "&C2

    Använd sedan en vanlig VLOOKUP-formel och placera båda kriterierna i Lookup_value argument, separerade med ett mellanslag:

    =VLOOKUP("Jeremy Sweets", A2:D11, 4, FALSE)

    Du kan också ange kriterierna i separata celler (G1 och G2 i vårt fall) och sammanfoga dessa celler:

    =VLOOKUP(G1&" "&G2, A2:D11, 4, FALSE)

    Eftersom vi vill returnera ett värde från kolumn D, som är den fjärde i tabellmatrisen, använder vi 4 för col_index_num . range_lookup argumentet är inställt på FALSE för att Vlookup ska kunna göra en exakt matchning. Skärmbilden nedan visar resultatet:

    Om din uppslagstabell finns i ett annat blad inkludera arkets namn i din VLOOKUP-formel. Till exempel:

    =VLOOKUP(G1&" "&G2, Order!A2:D11, 4, FALSE)

    Alternativt kan du skapa ett namngivet intervall för uppslagstabellen (t.ex, Beställningar ) för att göra formeln lättare att läsa:

    =VLOOKUP(G1&" "&G2, Beställare, 4, FALSE)

    Mer information finns i avsnittet Hur man gör en Vlookup från ett annat ark i Excel.

    Observera: För att formeln ska fungera korrekt ska värdena i hjälpkolumnen sammanlänkas på exakt samma sätt som i Lookup_value Vi har till exempel använt ett mellanslag för att separera kriterierna i både hjälpkolumnen (B2&" "&C2) och VLOOKUP-formeln (G1&" "&G2).

    Formel 2. Excel VLOOKUP med flera villkor

    I teorin kan du använda ovanstående tillvägagångssätt för att göra en Vlookup med fler än två kriterier. Det finns dock ett par invändningar. För det första är ett lookup-värde begränsat till 255 tecken, och för det andra är det möjligt att kalkylbladets utformning inte tillåter att man lägger till en hjälpkolumn.

    Som tur är erbjuder Microsoft Excel ofta mer än ett sätt att göra samma sak. För att göra en Vlookup av flera kriterier kan du använda antingen en kombination av INDEX MATCH eller funktionen XLOOKUP som nyligen infördes i Office 365.

    Till exempel, för att söka upp baserat på 3 olika värden ( Datum , Kundnamn och Produkt ), använd en av följande formler:

    =INDEX(D2:D11, MATCH(1, (G1=A2:A11) * (G2=B2:B11) * (G3=C2:C11), 0))

    =XLOOKUP(1, (G1=A2:A11) * (G2=B2:B11) * (G3=C2:C11), D2:D11)

    Var:

    • G1 är kriterium 1 (datum)
    • G2 är kriterium 2 (kundens namn)
    • G3 är kriterium 3 (produkt)
    • A2:A11 är uppslagsintervall 1 (datum)
    • B2:B11 är uppslagsintervall 2 (kundnamn)
    • C2:C11 är uppslagsintervall 3 (produkter)
    • D2:D11 är returområdet (kvantitet).

    Observera: I alla versioner utom Excel 365 ska INDEX MATCH anges som en CSE-matrisformel genom att trycka på Ctrl + Shift + Enter. I Excel 365 som stöder dynamiska matriser fungerar det också som en vanlig formel.

    För en detaljerad förklaring av formlerna, se:

    • XLOOKUP med flera kriterier
    • Formeln INDEX MATCH med flera kriterier

    Så här använder du VLOOKUP för att få den andra, tredje eller nionde matchen

    Som du redan vet kan Excel VLOOKUP endast hämta ett matchande värde, närmare bestämt den första matchningen. Men vad händer om det finns flera matchningar i din uppslagsarray och du vill hämta den andra eller tredje instansen? Uppgiften låter ganska komplicerad, men det finns en lösning!

    Formel 1. Vlookup Nth instance

    Anta att du har kundnamn i en kolumn, produkterna de köpt i en annan och att du vill hitta den andra eller tredje produkten som en kund köpt.

    Det enklaste sättet är att lägga till en hjälpkolumn till vänster om tabellen som vi gjorde i det första exemplet. Men den här gången fyller vi den med kundnamn och nummer som " John Doe1 ", " John Doe2 ", osv.

    För att få fram förekomsten använder du funktionen COUNTIF med en blandad intervallreferens (den första referensen är absolut och den andra är relativ, t.ex. $B$2:B2). Eftersom den relativa referensen ändras beroende på positionen för cellen där formeln kopieras, blir den i rad 3 $B$2:B3, i rad 4 - $B$2:B4, och så vidare.

    Om du sammanfogar kundnamnet (B2) får formeln följande form:

    =B2&COUNTIF($B$2:B2, B2)

    Ovanstående formel läggs i A2, och sedan kopierar du den ner till så många celler som behövs.

    Därefter anger du målnamnet och förekomstnumret i separata celler (F1 och F2) och använder nedanstående formel för att Vlookup en specifik förekomst:

    =VLOOKUP(F1&F2, A2:C11, 3, FALSE)

    Formel 2. Vlookup 2:a förekomst

    Om du letar efter den andra instansen av uppslagsvärdet kan du klara dig utan hjälpkolumnen. Skapa istället tabellmatrisen dynamiskt genom att använda funktionen INDIRECT tillsammans med MATCH:

    =VLOOKUP(E1, INDIRECT("A"&(MATCH(E1, A2:A11, 0)+2)&":B11"), 2, FALSE)

    Var:

    • E1 är uppslagsvärdet.
    • A2:A11 är uppslagsintervallet
    • B11 är den sista cellen (längst ner till höger) i uppslagstabellen.

    Observera att formeln ovan är skriven för ett specifikt fall där datacellerna i uppslagstabellen börjar på rad 2. Om din tabell ligger någonstans i mitten av arket kan du använda den här universella formeln, där A1 är den övre vänstra cellen i uppslagstabellen som innehåller en kolumnrubrik:

    =VLOOKUP(E1, INDIRECT("A"&(MATCH(E1, A2:A11, 0)+1+ROW(A1))&":B11"), 2, FALSE)

    Hur denna formel fungerar

    Här är den viktigaste delen av formeln som skapar en dynamiskt vlookup-område :

    INDIRECT("A"&(MATCH(E1, A2:A11, 0)+2)&":B11")

    Funktionen MATCH som är konfigurerad för exakt matchning (0 i det sista argumentet) jämför målnamnet (E1) med listan över namn (A2:A11) och returnerar positionen för den första matchningen, som i vårt fall är 3. Detta nummer kommer att användas som startradkoordinat för vlookup-området, så vi lägger till 2 (+1 för att utesluta den första instansen och +1 för att utesluta rad 1 med kolumnrubrikerna).Alternativt kan du använda 1+ROW(A1) för att beräkna den nödvändiga justeringen automatiskt baserat på positionen för huvudraden (A1 i vårt fall).

    Resultatet blir följande textsträng, som INDIRECT omvandlar till en intervallreferens:

    INDIRECT("A"&5&":B11") -> A5:B11

    Detta sortiment går till tabell_array argumentet i VLOOKUP och tvingar den att börja söka i rad 5, vilket innebär att den första instansen av uppslagsvärdet utelämnas:

    VLOOKUP(E1, A5:B11, 2, FALSE)

    Hur man Vlookup och returnerar flera värden i Excel

    Excel-funktionen VLOOKUP är utformad för att ge en enda träff. Finns det ett sätt att göra Vlookup på flera ställen? Ja, det finns det, men det är inte helt enkelt. Detta kräver en kombinerad användning av flera funktioner, t.ex. INDEX, SMALL och ROW, som är en matrisformel.

    Nedanstående kan till exempel hitta alla förekomster av uppslagsvärdet F2 i uppslagsintervallet B2:B16 och återge flera träffar från kolumn C:

    {=IFERROR(INDEX($C$2:$C$11, SMALL(IF($F$1=$B$2:$B$11, ROW($C$2:$C$11)-1,""), ROW()-1)),"")}

    Det finns två sätt att skriva in formeln i arbetsbladet:

    1. Skriv formeln i den första cellen, tryck på Ctrl + Shift + Enter och dra sedan formeln nedåt till ytterligare några celler.
    2. Markera flera intilliggande celler i en enda kolumn (F1:F11 i skärmbilden nedan), skriv formeln och tryck på Ctrl + Shift + Enter för att slutföra den.

    I vilket fall som helst bör antalet celler där du anger formeln vara lika med eller större än det maximala antalet möjliga matchningar.

    För en detaljerad förklaring av formellogiken och fler exempel, se Hur man VLOOKUP flera värden i Excel.

    Hur man gör en Vlookup i rader och kolumner (tvåvägslookup)

    Dubbeluppslagning (alias matrisuppslag eller . 2-dimentionell uppslag ) är ett fint ord för att söka upp ett värde i skärningspunkten mellan en viss rad och kolumn. Det finns några olika sätt att göra tvådimensionella sökningar i Excel, men eftersom fokus i den här handledningen ligger på VLOOKUP-funktionen kommer vi naturligtvis att använda den.

    I det här exemplet tar vi nedanstående tabell med månadsförsäljning och utarbetar en VLOOKUP-formel för att hämta försäljningssiffran för en viss artikel under en viss månad.

    Med artikelnamn i A2:A9, månadsnamn i B1:F1, målartikeln i I1 och målmånaden i I2, går formeln till på följande sätt:

    =VLOOKUP(I1, A2:F9, MATCH(I2, A1:F1, 0), FALSE)

    Hur denna formel fungerar

    Kärnan i formeln är den vanliga VLOOKUP-funktionen som söker efter en exakt matchning med uppslagsvärdet i I1. Men eftersom vi inte vet exakt i vilken kolumn försäljningen för en viss månad ligger, kan vi inte ange kolumnnumret direkt i col_index_num För att hitta den kolumnen använder vi följande funktion MATCH:

    MATCH(I2, A1:F1, 0)

    Översatt till engelska säger formeln: leta upp I2-värdet i A1:F1 och återge dess relativa position i matrisen. Genom att ange 0 i det tredje argumentet instruerar du MATCH att hitta ett värde som är exakt lika med det sökta värdet (det är som att använda FALSE för range_lookup argumentet i VLOOKUP).

    Sedan Mar finns i den fjärde kolumnen i uppslagsmatrisen, ger MATCH-funktionen 4, som går direkt till col_index_num argument för VLOOKUP:

    VLOOKUP(I1, A2:F9, 4, FALSE)

    Observera att även om månadsnamnen börjar i kolumn B använder vi A1:I1 för uppslagsarray. Detta görs för att det nummer som returneras av MATCH ska motsvara kolumnens position i tabell_array av VLOOKUP.

    Om du vill lära dig fler sätt att utföra matrisuppslag i Excel, se INDEX MATCH MATCH MATCH och andra formler för tvådimensionell uppslag.

    Hur man gör flera Vlookup i Excel (inbäddad Vlookup)

    Ibland kan det hända att huvudtabellen och uppslagstabellen inte har en enda kolumn gemensamt, vilket hindrar dig från att göra en Vlookup mellan två tabeller. Det finns dock en annan tabell som inte innehåller den information du söker, men som har en gemensam kolumn med huvudtabellen och en annan gemensam kolumn med uppslagstabellen.

    Bilden nedan illustrerar situationen:

    Målet är att kopiera priserna till huvudtabellen baserat på Artikel-ID:n Problemet är att tabellen med priserna inte har den Artikel-ID:n vilket innebär att vi måste göra två Vlookups i en formel.

    För enkelhetens skull skapar vi först ett par namngivna intervall:

    • Uppslagstabell 1 heter Produkter (D3:E10)
    • Uppslagstabell 2 heter Priser ( G3:H10 )

    Tabellerna kan finnas i samma eller olika arbetsblad.

    Och nu ska vi utföra den så kallade dubbel Vlookup , alias inbäddad Vlookup .

    Först gör du en VLOOKUP-formel för att hitta produktnamnet i tabell 1 (som heter Produkter ) baserat på artikel-ID (A3):

    =VLOOKUP(A3, Produkter, 2, FALSE)

    Lägg sedan in ovanstående formel i Lookup_value argumentet i en annan VLOOKUP-funktion för att hämta priser från Lookup table 2 (som heter Priser ) baserat på det produktnamn som returneras av den inbäddade VLOOKUP:

    =VLOOKUP(VLOOKUP(A3, Products, 2, FALSE), Prices, 2, FALSE)

    Skärmbilden nedan visar vår inbäddade Vlookup-formel i praktiken:

    Hur du Vlookup flera ark dynamiskt

    Ibland kan du ha data i samma format som är uppdelade på flera kalkylblad, och ditt mål är att hämta data från ett visst ark beroende på nyckelvärdet i en viss cell.

    Detta kan vara lättare att förstå med hjälp av ett exempel: Låt oss säga att du har några regionala försäljningsrapporter i samma format och att du vill få fram försäljningssiffrorna för en viss produkt i vissa regioner:

    Precis som i det föregående exemplet börjar vi med att definiera några namn:

    • Området A2:B5 i CA-ark heter CA_Sales .
    • Området A2:B5 i FL-bladet heter FL_Sales .
    • Området A2:B5 i KS ark heter KS_Sales .

    Som du kan se har alla namngivna intervall en gemensam del ( Försäljning ) och unika delar ( CA , FL , KS ). Se till att namnge dina intervall på ett liknande sätt eftersom det är viktigt för den formel som vi kommer att bygga upp.

    Formel 1. INDIRECT VLOOKUP för att dynamiskt hämta data från olika ark.

    Om du ska hämta data från flera ark är en VLOOKUP INDIRECT-formel den bästa lösningen - kompakt och lätt att förstå.

    I det här exemplet organiserar vi den sammanfattande tabellen på följande sätt:

    • Ange de intressanta produkterna i A2 och A3. Dessa är våra referensvärden.
    • Ange de unika delarna av de namngivna områdena i B1, C1 och D1.

    Nu sammanfogar vi cellen med den unika delen (B1) med den gemensamma delen ("_Sales") och matar den resulterande strängen till INDIRECT:

    INDIRECT(B$1&"_Sales")

    INDIRECT-funktionen omvandlar strängen till ett namn som Excel kan förstå, och du placerar det i tabell_array argument för VLOOKUP:

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

    Ovanstående formel går till B2, och sedan kopierar du den nedåt och till höger.

    Observera att vi i uppslagsvärdet ($A2) har låst kolumnkoordinaten med absolut cellreferens så att kolumnen förblir fast när formeln kopieras till höger. I B$1-referensen har vi låst raden eftersom vi vill att kolumnkoordinaten ska ändras och tillhandahålla en lämplig namndel till INDIRECT beroende på i vilken kolumn formeln kopieras:

    Om huvudtabellen är organiserad på ett annat sätt, med uppslagsvärdena i en rad och unika delar av intervallnamnen i en kolumn, bör du låsa radkoordinaten i uppslagsvärdet (B$1) och kolumnkoordinaten i namndelarna ($A2):

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

    Formel 2. VLOOKUP och inbäddade IF:er för att söka upp flera blad.

    Om du bara har två eller tre uppslagsblad kan du använda en ganska enkel VLOOKUP-formel med inbäddade IF-funktioner för att välja rätt blad baserat på nyckelvärdet i en viss cell:

    =VLOOKUP($A2, IF(B$1="CA", CA_Sales, IF(B$1="FL", FL_Sales, IF(B$1="KS", KS_Sales,""))), 2, FALSE)

    Där $A2 är uppslagsvärdet (artikelnamn) och B$1 är nyckelvärdet (tillstånd):

    I det här fallet behöver du inte nödvändigtvis definiera namn och kan använda externa referenser för att hänvisa till ett annat ark eller en annan arbetsbok.

    För fler exempel på formler, se Hur man gör VLOOKUP på flera ark i Excel.

    Så här använder du VLOOKUP 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

    Avancerade exempel på VLOOKUP-formler (.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.