VLOOKUP a diversos fulls a Excel amb exemples

  • Comparteix Això
Michael Brown

El tutorial mostra com utilitzar la funció BUSCAR V per copiar dades d'un altre full de treball o llibre de treball, cercar en diversos fulls i cercar dinàmicament per retornar valors de diferents fulls a diferents cel·les.

Quan busqueu informació a Excel, és un cas rar quan totes les dades es troben al mateix full. Més sovint, haureu de cercar en diversos fulls o fins i tot en diferents llibres de treball. La bona notícia és que Microsoft Excel ofereix més d'una manera de fer-ho, i la mala notícia és que totes les maneres són una mica més complicades que una fórmula VLOOKUP estàndard. Però amb només una mica de paciència, els esbrinarem :)

    Com fer BUSCAR V entre dos fulls

    Per començar, investiguem un cas més senzill: utilitzar BUSCAR V per copiar dades d'un altre full de treball. És molt semblant a una fórmula normal de BUSCAR V que cerca al mateix full de treball. La diferència és que incloeu el nom del full a l'argument table_array per indicar a la fórmula en quin full de treball es troba l'interval de cerca.

    La fórmula genèrica per a BUSCAR V des d'un altre full és la següent:

    CERCA V(valor_de_cerca, Full!interval, num_índex_col, [cerca_interval])

    Com a exemple, traurem les xifres de vendes de l'informe gen a Resum full. Per a això, definim els arguments següents:

    • Lookup_values es troben a la columna A del full Resum iCERCA V:

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

      Finalment, aquesta fórmula CERCA V molt estàndard cerca el valor A2 a la primera columna de l'interval A2:C6 al full Oest i retorna un coincidència de la 2a columna. Això és tot!

      Cerca V dinàmica per retornar dades de diversos fulls a diferents cel·les

      En primer lloc, definim què significa exactament la paraula "dinàmica" en aquest context i com serà aquesta fórmula. diferents dels anteriors.

      En cas que tingueu grans blocs de dades en el mateix format que es divideixen en diversos fulls de càlcul, és possible que vulgueu extreure informació de diferents fulls a diferents cel·les. La imatge següent il·lustra el concepte:

      A diferència de les fórmules anteriors que recuperaven un valor d'un full específic basant-se en un identificador únic, aquesta vegada estem buscant extreure valors de diversos fulls alhora. temps.

      Hi ha dues solucions diferents per a aquesta tasca. En ambdós casos, heu de fer una mica de treball preparatori i crear intervals amb nom per a les cel·les de dades a cada full de cerca. Per a aquest exemple, hem definit els intervals següents:

      • Vendes_est - A2:B6 al full Est
      • Vendes_nord - A2: B6 al full Nord
      • South_Sales - A2:B6 al full South
      • West_Sales - A2:B6 al full Oest

      CERCA V i SI imbricats

      Si teniu un nombre raonable de fulls per buscar, podeu utilitzar les funcions SI imbricadesper seleccionar el full en funció de les paraules clau de les cel·les predefinides (cel·les B1 a D1 en el nostre cas).

      Amb el valor de cerca a A2, la fórmula és la següent:

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

      Traduït a l'anglès, la part IF diu:

      Si B1 és East , mireu a l'interval anomenat East_Sales ; si B1 és North , mireu a l'interval anomenat North_Sales ; si B1 és South , busqueu a l'interval anomenat South_Sales ; i si B1 és Oest , mireu a l'interval anomenat Vendes_Oest .

      L'interval retornat per IF va a table_array de VLOOKUP, que extreu un valor coincident de la 2a columna del full corresponent.

      L'ús intel·ligent de referències mixtes per al valor de cerca ($A2 - columna absoluta i fila relativa) i la prova lògica de IF (B$1 - columna relativa) i fila absoluta) permet copiar la fórmula a altres cel·les sense cap canvi: Excel ajusta les referències automàticament en funció de la posició relativa d'una fila i una columna.

      Així, introduïm la fórmula a B2, la copiem correctament i fins a tantes columnes i files com calgui i obteniu el resultat següent:

      CERCA VINDIRECTA

      Quan es treballa amb molts fulls, diversos nivells imbricats també poden fer que la fórmula llarg i difícil de llegir. Una manera molt millor és crear un interval de cerca dinàmica amb l'ajuda d'INDIRECT:

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

      Aquí, concatenem la referència a la cel·la que conté unpart única de la gamma denominada (B1) i la part comuna (_Sales). Això produeix una cadena de text com "East_Sales", que INDIRECTE converteix al nom de rang comprensible per Excel.

      Com a resultat, obteniu una fórmula compacta que funciona perfectament amb qualsevol nombre de fulls:

      Així és com fer una cerca entre fulls i fitxers a Excel. Us agraeixo la lectura i esperem veure-us al nostre bloc la setmana vinent!

      Quader de pràctiques per descarregar

      Exemples de múltiples fulls de cerca (fitxer .xlsx)

      consulteu la primera cel·la de dades, que és A2.
    • Matriu_taula és l'interval A2:B6 del full de gener. Per fer-hi referència, prefixeu la referència de l'interval amb el nom del full seguit del signe d'exclamació: Jan!$A$2:$B$6.

      Si us plau, tingueu en compte que bloquegem l'interval amb referències de cel·les absolutes per evitar que canviï quan copieu la fórmula a altres cel·les.

      Col_index_num és 2 perquè volem copiar un valor de la columna B, que és la segona columna de la matriu de la taula.

    • Range_lookup s'estableix en FALSE per buscar una coincidència exacta.

    Ajuntant els arguments, obtenim aquesta fórmula:

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

    Arrossegueu la fórmula cap avall per la columna i obtindreu aquest resultat:

    En un de manera similar, podeu cercar dades dels fulls febrer i mar :

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

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

    Consells i notes:

    • Si el nom del full conté espais o caràcters no alfabètics , s'ha d'adjuntar entre cometes simples, com ara 'Ventes de gener'!$A$2:$B$6 . Per obtenir més informació, vegeu Com fer referència a un altre full a Excel.
    • En lloc d'escriure el nom d'un full directament en una fórmula, podeu canviar al full de treball de cerca i seleccionar-hi l'interval. L'Excel inserirà automàticament una referència amb la sintaxi correcta, estalviant-vos problemes per comprovar el nom i resoldre'n els problemes.

    Recerca virtual des d'un llibre de treball diferent

    Per a CERCA V entre dosals llibres de treball, incloeu el nom del fitxer entre claudàtors, seguit del nom del full i del signe d'exclamació.

    Per exemple, per cercar el valor A2 a l'interval A2:B6 al full Jan a al llibre de treball Sales_reports.xlsx , utilitzeu aquesta fórmula:

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

    Per a tots els detalls, consulteu BUSCAR V des d'un altre llibre d'Excel.

    Cerca V a través múltiples fulls amb IFERROR

    Quan necessiteu cercar entre més de dos fulls, la solució més senzilla és utilitzar VLOOKUP en combinació amb IFERROR. La idea és niar diverses funcions IFERROR per comprovar diversos fulls de treball un per un: si la primera BUSCAR V no troba cap coincidència al primer full, cerqueu al full següent, i així successivament.

    IFERROR(BUSCARV(…), IFERROR(VLOOKUP(…), …, " Not found "))

    Per veure com funciona aquest enfocament amb dades de la vida real, considerem l'exemple següent. A continuació es mostra la taula Resum que volem omplir amb els noms i els imports dels articles cercant el número de comanda als fulls Oest i Est :

    Primer, tirarem els elements. Per això, demanem a la fórmula BUSCAR V que cerqui el número d'ordre a A2 al full Est i retorni el valor de la columna B (2a columna a table_array A2:C6). Si no es troba una coincidència exacta, cerqueu al full Oest . Si les dues cerques V fallen, torneu "No trobat".

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

    Per retornar l'import,simplement canvieu el número d'índex de la columna a 3:

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

    Consell. Si cal, podeu especificar diferents matrius de taules per a diferents funcions VLOOKUP. En aquest exemple, tots dos fulls de cerca tenen el mateix nombre de files (A2:C6), però els vostres fulls de treball poden tenir una mida diferent.

    Recerca virtual en diversos llibres de treball

    Per fer una cerca virtual entre dos o més llibres de treball, afegiu el nom del llibre de treball entre claudàtors i poseu-lo abans del nom del full. Per exemple, a continuació es mostra com podeu cercar V en dos fitxers diferents ( Llibre1 i Llibre2 ) amb una única fórmula:

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

    Fes que el número d'índex de columna sigui dinàmic per a Vlookup diverses columnes

    En una situació en què necessiteu retornar dades de diverses columnes, fer que col_index_num sigui dinàmic us podria estalviar temps. S'han de fer un parell d'ajustaments:

    • Per a l'argument col_index_num , utilitzeu la funció COLUMNS que retorna el nombre de columnes d'una matriu especificada: COLUMNS($A$1 : B$1). (La coordenada de la fila no importa realment, pot ser una fila qualsevol.)
    • A l'argument lookup_value , bloquegeu la referència de la columna amb el signe $ ($A2), de manera que es mantingui s'ha corregit en copiar la fórmula a altres columnes.

    Com a resultat, obteniu una mena de fórmula dinàmica que extreu els valors coincidents de diferents columnes, depenent de quina columna es copie la fórmula:

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

    Quan s'introdueix a la columna B, COLUMNS($A$1:B$1)avalua a 2 dient-li a VLOOKUP que retorni un valor de la segona columna de la matriu de la taula.

    Quan es copia a la columna C (és a dir, heu arrossegat la fórmula de B2 a C2), B$1 canvia a C$1 perquè la referència de la columna és relativa. En conseqüència, COLUMNS($A$1:C$1) s'avalua com a 3 forçant BUSCARV a retornar un valor de la 3a columna.

    Aquesta fórmula funciona molt bé per a 2 o 3 fulls de cerca. Si en teniu més, els IFERRORs repetitius es tornen massa feixucs. El següent exemple demostra un enfocament una mica més complicat però molt més elegant.

    Buscar múltiples fulls amb INDIRECT

    Una manera més de cercar entre diversos fulls a Excel és utilitzar una combinació de BUSCAR V i Funcions INDIRECTES. Aquest mètode requereix una mica de preparació, però al final, tindreu una fórmula més compacta per a Vlookup en qualsevol nombre de fulls de càlcul.

    Una fórmula genèrica per Vlookup a través de fulls és la següent:

    VLOOKUP( valor_de_cerca , INDIRECT("'"&INDEX( Fulls_de_cerca , COINCORDA(1, --(COUNTIF(INDIRECT("'" & Fulls_de_cerca & ") '! interval_de_cerca "), valor_de_cerca )>0), 0)) & "'! matriu_taula "), núm_índex_col , FALSE)

    On:

    • Fulls_de_cerca : un interval amb nom format pels noms dels fulls de cerca.
    • Valor_de_cerca : el valor a cercar.
    • Interval_de_cerca : l'interval de columnes dels fulls de cerca on cercar la cercavalue.
    • Table_array : l'interval de dades dels fulls de cerca.
    • Col_index_num : el número de la columna de la matriu de la taula des de la qual cal retorna un valor.

    Per tal que la fórmula funcioni correctament, tingueu en compte les següents advertències:

    • És una fórmula matricial, que s'ha de completar prement Ctrl + Maj+Enter tecles juntes.
    • Tots els fulls han de tenir el mateix ordre de columnes .
    • Com que fem servir una matriu de taula per a tots els fulls de cerca, especifiqueu el interval més gran si els vostres fulls tenen un nombre diferent de files.

    Com s'utilitza la fórmula per cercar entre fulls

    Per cercar diversos fulls alhora, feu aquests passos passos:

    1. Anoteu tots els noms dels fulls de cerca en algun lloc del vostre llibre de treball i anomeneu aquest interval ( Fulls_de_cerca en el nostre cas).

  • Ajusta la fórmula genèrica per a les teves dades. En aquest exemple, estarem:
    • cercant el valor A2 ( valor_de_cerca )
    • a l'interval A2:A6 ( interval_de_cerca ) a quatre fulls de treball ( Est , Nord , Sud i Oest ) i
    • treuen valors coincidents de la columna B, que és la columna 2 ( col_index_num ) a l'interval de dades A2:C6 ( table_array ).

    Amb els arguments anteriors, la fórmula pren aquesta forma:

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

    Tingueu en compte que bloquegem els dos intervals ($A$2:$A$6 i $A$2:$C$6) amb referències de cel·les absolutes.

  • Introduïu el fórmulaa la cel·la superior (B2 en aquest exemple) i premeu Ctrl + Maj + Retorn per completar-la.
  • Feu doble clic o arrossegueu el controlador d'emplenament per copiar la fórmula a la columna.
  • Com a resultat, tenim la fórmula per buscar el número de comanda en 4 fulls i recuperar l'article corresponent. Si no es troba un número de comanda específic, es mostra un error #N/A com a la fila 14:

    Per retornar l'import, simplement substituïu 2 per 3 a col_index_num. L'argument ja que les quantitats es troben a la tercera columna de la matriu de la taula:

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

    Si voleu substituir la notació d'error estàndard #N/A amb el vostre propi text, embolcalla la fórmula a la funció IFNA:

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

    Buscar múltiples fulls entre llibres de treball

    Aquesta fórmula genèrica (o qualsevol variació) també es pot utilitzar per cercar diversos fulls en un llibre de treball diferent . Per a això, concateneu el nom del llibre de treball dins d'INDIRECT, tal com es mostra a la fórmula següent:

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

    Buscar entre fulls i retornar diverses columnes

    Si voleu extreure dades de diverses columnes, una fórmula de matriu multicel·la pot fer-ho d'una vegada. Per crear aquesta fórmula, proporcioneu una constant de matriu per a l'argument col_index_num .

    En aquest exemple, volem retornar els noms dels elements (columna B) i les quantitats (columna C), que són la 2a i la 3a columnes de la matriu de la taula, respectivament. Per tant, la matriu necessària és{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)

    Per introduir correctament la fórmula en diverses cel·les, això és el que heu de fer:

    • A la primera fila, seleccioneu totes les cel·les que voleu omplir (B2:C2 al nostre exemple).
    • Escriviu la fórmula i premeu Ctrl + Maj + Retorn . S'introdueix la mateixa fórmula a les cel·les seleccionades, que retornarà un valor diferent a cada columna.
    • Arrossegueu la fórmula cap a la resta de files.

    Com funciona aquesta fórmula

    Per entendre millor la lògica, desglossem aquesta fórmula bàsica a les funcions individuals:

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

    Treballant des de dins cap a fora, això és el que fa la fórmula:

    COUNTIF i INDIRECT

    En poques paraules, INDIRECT crea les referències per a tots els fulls de cerca i COUNTIF compta les ocurrències de la cerca valor (A2) a cada full:

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

    En més detall:

    Primer, concateneu el nom de l'interval (Lookup_sheets) i la referència de l'interval ($A$2: $A$6), afegint apòstrofs i el signe d'exclamació als llocs adequats per fer una referència externa i alimentar la cadena de text resultant a la funció INDIRECTA per fer referència dinàmica als fulls de cerca:

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

    COUNTIF comprova cada cel·la de l'interval A2:A6 de cada full de cerca amb el valor d'A2 a la part principal full i retorna el recompte de coincidències per a cada full. Al nostre conjunt de dades, el número de comanda en A2 (101) es troba al full Oest , que és el quart a larang anomenat, de manera que COUNTIF retorna aquesta matriu:

    {0;0;0;1}

    A continuació, compareu cada element de la matriu anterior amb 0:

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

    Això produeix una matriu de valors TRUE (superiors a 0) i FALSE (igual a 0), que coaccioneu a 1 i 0 utilitzant un doble unari (--) i obteniu la següent matriu com a resultat:

    {0; 0; 0; 1}

    Aquesta operació és una precaució addicional per gestionar una situació en què un full de cerca conté diverses ocurrències del valor de cerca, en aquest cas COUNTIF retornaria un recompte superior a 1, mentre que només volem 1 i 0 al matriu final (en un moment, entendreu per què).

    Després de totes aquestes transformacions, la nostra fórmula té el següent aspecte:

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

    INDEX i MATCH

    En aquest punt, una combinació clàssica d'INDEX MATCH entra en:

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

    La funció MATCH configurada per a la coincidència exacta (0 a l'últim argument) cerca el valor 1 a la matriu { 0;0;0;1} i retorna la seva posició, que és 4:

    INDEX(Lookup_sheets, 4)

    La funció INDEX utilitza el número retornat per MATCH com a argument del número de fila (núm_fila) i retorna el quart valor de l'interval anomenat Fulls_de_cerca , que és Oest .

    Per tant, la fórmula es redueix encara més. a:

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

    VLOOKUP i INDIRECT

    La funció INDIRECTA processa la cadena de text que hi ha dins:

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

    I la converteix en una referència que va a l'argument table_array de

    Michael Brown és un entusiasta de la tecnologia dedicat amb una passió per simplificar processos complexos mitjançant eines de programari. Amb més d'una dècada d'experiència en la indústria tecnològica, ha perfeccionat les seves habilitats en Microsoft Excel i Outlook, així com en Google Sheets i Docs. El bloc de Michael es dedica a compartir els seus coneixements i experiència amb altres persones, oferint consells i tutorials fàcils de seguir per millorar la productivitat i l'eficiència. Tant si sou un professional experimentat com si sou un principiant, el bloc de Michael ofereix valuoses idees i consells pràctics per treure el màxim profit d'aquestes eines de programari essencials.