INHOUDSOPGAWE
Die tutoriaal wys hoe om die VLOOKUP-funksie te gebruik om data vanaf 'n ander werkblad of werkboek te kopieer, Vlookup in veelvuldige velle, en dinamies op te soek om waardes van verskillende velle na verskillende selle terug te keer.
Wanneer jy inligting in Excel soek, is dit 'n seldsame geval wanneer al die data op dieselfde blad is. Meer dikwels sal jy oor verskeie velle of selfs verskillende werkboeke moet soek. Die goeie nuus is dat Microsoft Excel meer as een manier bied om dit te doen, en die slegte nuus is dat al die maniere 'n bietjie meer ingewikkeld is as 'n standaard VLOOKUP-formule. Maar met net 'n bietjie geduld, sal ons hulle uitvind :)
Hoe om VLOOKUP tussen twee velle te maak
Om mee te begin, kom ons ondersoek 'n eenvoudigste geval - gebruik VLOOKUP om kopieer data vanaf 'n ander werkblad. Dit is baie soortgelyk aan 'n gewone VLOOKUP-formule wat op dieselfde werkblad soek. Die verskil is dat jy die bladnaam in die tabelskikking -argument insluit om vir jou formule te sê in watter werkblad die opsoekreeks geleë is.
Die generiese formule vir VLOOKUP vanaf 'n ander blad is soos volg:
VLOOKUP(lookup_value, Sheet!reeks, col_index_num, [reeks_lookup])As 'n voorbeeld, kom ons trek die verkoopsyfers van Jan -verslag na Opsomming blad. Hiervoor definieer ons die volgende argumente:
- Opsoekwaardes is in kolom A op die Opsomming -blad, en onsVLOOKUP:
VLOOKUP($A2, 'West'!$A$2:$C$6 , 2, FALSE)
Laastens soek hierdie baie standaard VLOOKUP-formule na die A2-waarde in die eerste kolom van die reeks A2:C6 op die Wes -blad en gee 'n pas uit die 2de kolom. Dis dit!
Dynamiese VLOOKUP om data van verskeie velle na verskillende selle terug te stuur
Kom ons definieer eerstens wat presies die woord "dinamies" in hierdie konteks beteken en hoe hierdie formule gaan wees verskil van die voriges.
In die geval dat jy groot stukke data in dieselfde formaat het wat oor verskeie sigblaaie verdeel is, wil jy dalk inligting uit verskillende velle in verskillende selle onttrek. Die prent hieronder illustreer die konsep:
Anders as die vorige formules wat 'n waarde van 'n spesifieke blad gekry het gebaseer op 'n unieke identifiseerder, soek ons hierdie keer waardes uit verskeie velle by 'n tyd.
Daar is twee verskillende oplossings vir hierdie taak. In beide gevalle moet jy 'n bietjie voorbereidende werk doen en benoemde reekse vir dataselle in elke opsoekblad skep. Vir hierdie voorbeeld het ons die volgende reekse gedefinieer:
- Oos_Verkope - A2:B6 op die Oos-blad
- Noord_Verkope - A2: B6 op die Noord-vel
- Suid_Verkope - A2:B6 op die Suid-vel
- Wes_Verkope - A2:B6 op die Wes-vel
VLOOKUP en geneste IF'e
As jy 'n redelike aantal velle het om na te kyk, kan jy geneste IF-funksies gebruikom die blad te kies gebaseer op die sleutelwoorde in die vooraf gedefinieerde selle (selle B1 tot D1 in ons geval).
Met die opsoekwaarde in A2 is die formule soos volg:
=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)
Vertaal in Engels, lees die IF-deel:
As B1 Oos is, kyk in die reeks genaamd Oos_Verkope ; as B1 Noord is, kyk in die reeks genaamd Noord_Verkope ; as B1 Suid is, kyk in die reeks genaamd Suid_Verkope ; en as B1 Wes is, kyk in die reeks genaamd West_Sales .
Die reeks wat deur IF teruggestuur word, gaan na tabelskikking van VLOOKUP, wat trek 'n ooreenstemmende waarde van die 2de kolom op die ooreenstemmende blad.
Die slim gebruik van gemengde verwysings vir die opsoekwaarde ($A2 - absolute kolom en relatiewe ry) en die logiese toets van IF (B$1 - relatiewe kolom) en absolute ry) laat toe om die formule na ander selle te kopieer sonder enige veranderinge - Excel pas die verwysings outomaties aan op grond van die relatiewe posisie van 'n ry en kolom.
So, ons voer die formule in B2 in, kopieer dit reg en af na soveel kolomme en rye as wat nodig is, en kry die volgende resultaat:
INDIREKTE OPSOEK
Wanneer jy met baie velle werk, kan verskeie geneste vlakke die formule ook maak lank en moeilik om te lees. 'n Veel beter manier is om 'n dinamiese vlookup-reeks te skep met behulp van INDIREKTE:
=VLOOKUP($A2, INDIRECT(B$1&"_Sales"), 2, FALSE)
Hier voeg ons die verwysing saam na die sel wat 'nunieke deel van die genoemde reeks (B1) en die gemeenskaplike deel (_Verkope). Dit produseer 'n teksstring soos "East_Sales", wat INDIREK omskakel na die reeksnaam wat deur Excel verstaanbaar is.
As gevolg hiervan kry jy 'n kompakte formule wat pragtig op enige aantal velle werk:
Dit is hoe om tussen velle en lêers in Excel op te soek. Ek bedank jou vir die lees en hoop om jou volgende week op ons blog te sien!
Oefen werkboek vir aflaai
Vlookup veelvuldige velle voorbeelde (.xlsx lêer)
verwys na die eerste datasel, wat A2 is. - Tabel_skikking is die reeks A2:B6 op die Jan-blad. Om daarna te verwys, voorvoegsel die reeksverwysing met die bladnaam gevolg deur die uitroepteken: Jan!$A$2:$B$6.
Let asseblief daarop dat ons die reeks met absolute selverwysings sluit om te verhoed dat dit verander wanneer die formule na ander selle gekopieer word.
Kol_indeks_num is 2 omdat ons 'n waarde wil kopieer vanaf kolom B, wat die 2de kolom in die tabelskikking is.
- Reikopsoek is op ONWAAR gestel om 'n presiese passing op te soek.
As ons die argumente bymekaar sit, kry ons hierdie formule:
=VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)
Sleep die formule af in die kolom en jy sal hierdie resultaat kry:
In 'n Op soortgelyke wyse kan jy data van die Feb - en Mrt -blaaie opsoek:
=VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)
=VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)
Wenke en notas:
- As die bladnaam spasies of nie-alfabetiese karakters bevat, moet dit in enkele aanhalingstekens ingesluit word, soos 'Jan Verkope'!$A$2:$B$6 . Vir meer inligting, sien asseblief Hoe om na 'n ander blad in Excel te verwys.
- In plaas daarvan om 'n bladnaam direk in 'n formule te tik, kan jy oorskakel na die opsoekwerkblad en die reeks daar kies. Excel sal outomaties 'n verwysing met die korrekte sintaksis invoeg, wat jou die moeite spaar om die naam na te gaan en die probleem op te los.
Vkyk op van 'n ander werkboek
Na VLOOKUP tussen tweewerkboeke, sluit die lêernaam tussen vierkantige hakies in, gevolg deur die bladnaam en die uitroepteken.
Om byvoorbeeld vir A2-waarde in die reeks A2:B6 op Jan -blad te soek in die Sales_reports.xlsx werkboek, gebruik hierdie formule:
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
Vir volledige besonderhede, sien asseblief VLOOKUP van 'n ander werkboek in Excel.
Vlookup across veelvuldige velle met IFERROR
Wanneer jy tussen meer as twee velle moet opsoek, is die maklikste oplossing om VLOOKUP in kombinasie met IFERROR te gebruik. Die idee is om verskeie IFERROR-funksies te nes om veelvuldige werkblaaie een vir een na te gaan: as die eerste VLOOKUP nie 'n passing op die eerste blad vind nie, soek in die volgende blad, ensovoorts.
IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(…), …, " Nie gevind nie "))Om te sien hoe hierdie benadering op werklike data werk, kom ons kyk na die volgende voorbeeld. Hieronder is die Opsomming -tabel wat ons met die itemname en -bedrae wil vul deur die bestelnommer in Wes - en Oos -blaaie op te soek:
Eers gaan ons die items trek. Hiervoor gee ons die VLOOKUP-formule opdrag om die bestelnommer in A2 op die Oos -blad te soek en die waarde van kolom B (2de kolom in tabelskikking A2:C6) terug te gee. As 'n presiese passing nie gevind word nie, soek dan in die West -blad. As beide Vlookups misluk, stuur "Nie gevind nie".
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 2, FALSE), "Not found"))
Om die bedrag terug te gee,verander eenvoudig die kolomindeksnommer na 3:
=IFERROR(VLOOKUP(A2, East!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, West!$A$2:$C$6, 3, FALSE), "Not found"))
Wenk. Indien nodig, kan jy verskillende tabel skikkings spesifiseer vir verskillende VLOOKUP funksies. In hierdie voorbeeld het beide opsoekblaaie dieselfde aantal rye (A2:C6), maar jou werkblaaie kan verskil in grootte.
Vlookup in veelvuldige werkboeke
Om tussen twee of meer werkboeke op te soek, sluit die werkboeknaam in vierkantige hakies en plaas dit voor die bladnaam. Byvoorbeeld, hier is hoe jy kan Vlookup in twee verskillende lêers ( Boek1 en Boek2 ) 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),"Not found"))
Maak kolomindeksnommer dinamies na Vlookup veelvuldige kolomme
In situasies wanneer jy data van verskeie kolomme moet terugstuur, kan dit jou tyd bespaar om col_index_num dinamies te maak. Daar is 'n paar aanpassings wat gemaak moet word:
- Vir die col_index_num argument, gebruik die COLUMNS-funksie wat die aantal kolomme in 'n gespesifiseerde skikking terugstuur: COLUMNS($A$1 :B$1). (Die rykoördinaat maak nie regtig saak nie, dit kan net enige ry wees.)
- In die lookup_value -argument, sluit die kolomverwysing met die $-teken ($A2), sodat dit bly vasgestel wanneer die formule na ander kolomme gekopieer word.
As gevolg hiervan kry jy 'n soort dinamiese formule wat ooreenstemmende waardes uit verskillende kolomme onttrek, afhangend van na watter kolom die formule gekopieer is:
=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"))
Wanneer dit in kolom B ingevoer is, COLUMNS($A$1:B$1)evalueer tot 2 en sê vir VLOOKUP om 'n waarde van die 2de kolom in die tabelskikking terug te gee.
Wanneer dit na kolom C gekopieer word (d.w.s. jy het die formule van B2 na C2 gesleep), verander B$1 na C$1 omdat die kolomverwysing is relatief. Gevolglik evalueer COLUMNS($A$1:C$1) tot 3, wat VLOOKUP dwing om 'n waarde van die 3de kolom terug te gee.
Hierdie formule werk uitstekend vir 2 - 3 opsoekblaaie. As jy meer het, word herhalende IFERRORs te omslagtig. Die volgende voorbeeld demonstreer 'n bietjie meer ingewikkelde maar baie meer elegante benadering.
Vlookup veelvuldige velle met INDIREKTE
Nog 'n manier om tussen veelvuldige velle in Excel op te kyk, is om 'n kombinasie van VLOOKUP en INDIREKTE funksies. Hierdie metode verg 'n bietjie voorbereiding, maar op die ou end sal jy 'n meer kompakte formule vir Vlookup hê in enige aantal sigblaaie.
'n Generiese formule vir Vlookup oor blaaie is soos volg:
VLOOKUP( soekwaarde , INDIREK("'"&INDEX( Opsoekblaaie , MATCH(1, --(COUNTIF(INDIREKTE("'" & Opsoekblaaie & " '! opsoekreeks "), opsoekwaarde )>0), 0)) & "'! tabelskikking "), kol_indeks_nommer , FALSE)Waar:
- Opsoekblaaie - 'n benoemde reeks wat bestaan uit die opsoekbladname.
- Opsoekwaarde - die waarde om na te soek.
- Opsoekreeks - die kolomreeks in die opsoekblaaie waar om na die opsoek te soekwaarde.
- Tabel_skikking - die datareeks in die opsoekblaaie.
- Kol_indeks_num - die nommer van die kolom in die tabelskikking vanwaar gee 'n waarde terug.
Vir die formule om korrek te werk, hou asseblief die volgende waarskuwings in gedagte:
- Dit is 'n skikkingsformule wat voltooi moet word deur Ctrl + te druk Shift + Enter sleutels saam.
- Al die velle moet dieselfde volgorde van kolomme hê.
- Aangesien ons een tabelskikking vir alle opsoekblaaie gebruik, spesifiseer die grootste reeks as jou velle verskillende getalle rye het.
Hoe om die formule te gebruik om oor velle op te soek
Om verskeie velle op 'n slag op te soek, voer hierdie stappe:
- Skryf al die opsoekbladname iewers in jou werkboek neer en noem daardie reeks ( Opsoekblaaie in ons geval).
- soek vir A2-waarde ( opsoekwaarde )
- in die reeks A2:A6 ( opsoekreeks ) in vier werkkaarte ( Oos , Noord , Suid en Wes ), en
- trek bypassende waardes uit kolom B, wat kolom 2 is ( kol_indeks_nommer ) in die datareeks A2:C6 ( tabelskikking ).
Met die bogenoemde argumente neem die formule hierdie vorm aan:
=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)
Let asseblief daarop dat ons beide reekse ($A$2:$A$6 en $A$2:$C$6) met absolute selverwysings sluit.
As die gevolg, ons het die formule om die bestelnommer in 4 velle op te soek en die ooreenstemmende item te haal. As 'n spesifieke bestelnommer nie gevind word nie, word 'n #N/A-fout vertoon soos in ry 14:
Om die bedrag terug te gee, vervang eenvoudig 2 met 3 in die kol_indeks_nommer argument aangesien bedrae in die 3de kolom van die tabelskikking is:
=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)
As jy die standaard #N/A-foutnotasie met jou eie teks wil vervang, draai om die formule in die IFNA-funksie:
=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")
Vsoek verskeie velle tussen werkboeke
Hierdie generiese formule (of enige variasie daarvan) kan ook gebruik word om verskeie velle in 'n ander werkboek op te soek. Hiervoor, koppel die werkboeknaam binne INDIREK aan soos getoon in die 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), "Not found")
Vkyk op tussen velle en gee veelvuldige kolomme terug
As jy data uit verskeie wil trek kolomme, 'n multi-sel skikking formule kan dit in een slag doen. Om so 'n formule te skep, verskaf 'n skikkingkonstante vir die kol_indeks_getal argument.
In hierdie voorbeeld wil ons die itemname (kolom B) en bedrae (kolom C) teruggee, wat is onderskeidelik die 2de en 3de kolomme in die tabelskikking. Dus, die vereiste skikking is{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 die formule korrek in veelvuldige selle in te voer, is dit wat jy moet doen:
- In die eerste ry, kies al die selle wat gevul moet word (B2:C2 in ons voorbeeld).
- Tik die formule en druk Ctrl + Shift + Enter. Dit voer dieselfde formule in die geselekteerde selle in, wat 'n ander waarde in elke kolom sal gee.
- Sleep die formule af na die oorblywende rye.
Hoe hierdie formule werk
Om die logika beter te verstaan, kom ons breek hierdie basiese formule af na die individuele funksies:
=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)
Werk van binne na buite, hier is wat die formule doen:
COUNTIF en INDIREK
In 'n neutedop, INDIRECT bou die verwysings vir alle opsoekblaaie, en COUNTIF tel die voorkoms van die opsoek waarde (A2) in elke vel:
--(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)
In meer besonderhede:
Eers voeg jy die reeksnaam (Lookup_sheets) en die reeksverwysing ($A$2: $A$6), voeg apostrofe en die uitroepteken op die regte plekke by om 'n eksterne verwysing te maak, en voer die gevolglike teksstring na die INDIREKTE funksie om dinamies na die opsoekblaaie te verwys:
INDIRECT({"'East'!$A$2:$A$6"; "'South'!$A$2:$A$6"; "'North'!$A$2:$A$6"; "'West'!$A$2:$A$6"})
COUNTIF kontroleer elke sel in die reeks A2:A6 op elke opsoekblad teen die waarde in A2 op die hoof blad en gee die telling van wedstryde vir elke blad terug. In ons datastel word die bestelnommer in A2 (101) in die West -blad gevind, wat 4de in diebenoemde reeks, dus COUNTIF gee hierdie skikking terug:
{0;0;0;1}
Volgende vergelyk jy elke element van die bogenoemde skikking met 0:
--({0; 0; 0; 1}>0)
Dit lewer 'n skikking van WAAR (groter as 0) en ONWAAR (gelyk aan 0) waardes, wat jy tot 1'e en 0'e dwing deur 'n dubbel unêre (--) te gebruik, en kry die volgende skikking as die resultaat:
{0; 0; 0; 1}
Hierdie bewerking is 'n ekstra voorsorgmaatreël om 'n situasie te hanteer wanneer 'n opsoekblad verskeie voorkomste van die opsoekwaarde bevat, in welke geval COUNTIF 'n telling groter as 1 sal teruggee, terwyl ons slegs 1'e en 0'e in die finale skikking (in 'n oomblik sal jy verstaan hoekom).
Na al hierdie transformasies lyk ons formule soos volg:
VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)
INDEX and MATCH
Op hierdie punt tree 'n klassieke INDEX MATCH-kombinasie in:
INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))
Die MATCH-funksie opgestel vir presiese passing (0 in die laaste argument) soek die waarde 1 in die skikking { 0;0;0;1} en gee sy posisie terug, wat 4 is:
INDEX(Lookup_sheets, 4)
Die INDEX-funksie gebruik die getal wat teruggestuur is deur MATCH as die rygetalargument (rygetal) en gee die 4de waarde in die genoemde reeks Opsoekblaaie terug, wat Wes is.
Dus, die formule verminder verder na:
VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)
VLOOKUP en INDIREKTE
Die INDIREKTE funksie verwerk die teksstring daarin:
INDIRECT("'"&"West"&"'!$A$2:$C$6")
En skakel dit om in 'n verwysing wat gaan na die tabel_skikking argument van