VLOOKUP pe mai multe foi în Excel cu exemple

  • Imparte Asta
Michael Brown

Tutorialul arată cum să utilizați funcția VLOOKUP pentru a copia date dintr-o altă foaie de calcul sau registru de lucru, Vlookup în mai multe foi și pentru a căuta dinamic pentru a returna valori din diferite foi în celule diferite.

Atunci când căutați anumite informații în Excel, este un caz rar când toate datele se află pe aceeași foaie. Mai des, va trebui să căutați în mai multe foi sau chiar în diferite registre de lucru. Vestea bună este că Microsoft Excel oferă mai multe modalități de a face acest lucru, iar vestea proastă este că toate modalitățile sunt puțin mai complicate decât o formulă VLOOKUP standard. Dar, cu puțină răbdare, putem să nele va descoperi :)

    Cum se face VLOOKUP între două foi

    Pentru început, să investigăm cel mai simplu caz - utilizarea VLOOKUP pentru a copia date dintr-o altă foaie de lucru. Este foarte asemănător cu o formulă VLOOKUP obișnuită care caută în aceeași foaie de lucru. Diferența este că includeți numele foii în tabel_array pentru a indica formulei dumneavoastră în ce foaie de calcul se află intervalul de căutare.

    Formula generică pentru VLOOKUP dintr-o altă foaie este următoarea:

    VLOOKUP(lookup_value, Foaie!gamă , col_index_num, [range_lookup])

    Ca un exemplu, să extragem cifrele de vânzări din Jan raportați la Rezumat Pentru aceasta, definim următoarele argumente:

    • Valori_de_consultare se află în coloana A de pe Rezumat și ne referim la prima celulă de date, care este A2.
    • Tabel_array este intervalul A2:B6 de pe foaia Jan. Pentru a vă referi la el, prefixați referința intervalului cu numele foii urmat de semnul exclamării: Jan!$A$2:$B$6.

      Vă rugăm să fiți atenți la faptul că blocăm intervalul cu referințe absolute de celule pentru a preveni schimbarea acestuia la copierea formulei în alte celule.

      Col_index_num este 2, deoarece dorim să copiem o valoare din coloana B, care este a doua coloană din tabloul tabelului.

    • Range_lookup este setat la FALSE pentru a căuta o potrivire exactă.

    Punând cap la cap argumentele, obținem următoarea formulă:

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

    Trageți formula în josul coloanei și veți obține acest rezultat:

    În mod similar, puteți face Vlookup din datele din Feb și Mar foi:

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

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

    Sfaturi și note:

    • În cazul în care numele foii conține spații sau caractere nealfabetice , trebuie să fie între ghilimele simple, de exemplu 'Vânzări ianuarie'!$A$2:$B$6 Pentru mai multe informații, consultați Cum se face trimitere la o altă foaie în Excel.
    • În loc să tastați numele foii direct într-o formulă, puteți trece la foaia de lucru de căutare și să selectați intervalul de acolo. Excel va insera automat o referință cu sintaxa corectă, scutindu-vă de a verifica numele și de a rezolva problemele.

    Vlookup dintr-un registru de lucru diferit

    Pentru a face VLOOKUP între două registre de lucru, includeți numele fișierului între paranteze pătrate, urmat de numele foii și de semnul exclamării.

    De exemplu, pentru a căuta valoarea A2 în intervalul A2:B6 pe Jan foaia din Rapoarte_de_vânzări.xlsx registru de lucru, utilizați această formulă:

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

    Pentru detalii complete, consultați VLOOKUP dintr-un alt registru de lucru în Excel.

    Vlookup pe mai multe foi cu IFERROR

    Atunci când aveți nevoie să căutați între mai mult de două foi, cea mai simplă soluție este să utilizați VLOOKUP în combinație cu IFERROR. Ideea este de a îngloba mai multe funcții IFERROR pentru a verifica mai multe foi de calcul, una câte una: dacă primul VLOOKUP nu găsește o potrivire pe prima foaie, căutați în foaia următoare și așa mai departe.

    IFERROR(VLOOKUP(....), IFERROR(VLOOKUP(...), ..., " Nu a fost găsit "))

    Pentru a vedea cum funcționează această abordare în cazul datelor din viața reală, să luăm în considerare următorul exemplu. Mai jos se prezintă Rezumat pe care dorim să îl completăm cu numele articolelor și sumele, căutând numărul de comandă în Vest și Est foi:

    În primul rând, vom extrage articolele. În acest scop, vom instrui formula VLOOKUP să caute numărul de comandă din A2 pe Est și returnează valoarea din coloana B (a doua coloană din tabel_array A2:C6). Dacă nu se găsește o potrivire exactă, căutați în Vest Dacă ambele Vlookup-uri eșuează, se returnează "Not found".

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

    Pentru a returna suma, este suficient să modificați numărul de index al coloanei la 3:

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

    Sfat. Dacă este necesar, puteți specifica matrice de tabele diferite pentru diferite funcții VLOOKUP. În acest exemplu, ambele foi de căutare au același număr de rânduri (A2:C6), dar foile dvs. de lucru pot avea dimensiuni diferite.

    Vlookup în mai multe registre de lucru

    Pentru a face Vlookup între două sau mai multe registre de lucru, includeți numele registrului de lucru între paranteze pătrate și puneți-l înainte de numele foii. De exemplu, iată cum puteți face Vlookup în două fișiere diferite ( Carte1 și Carte2 ) cu o singură formulă:

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

    Faceți numărul de index al coloanei dinamic pentru a Vlookup mai multe coloane

    În situația în care trebuie să returnați date de pe mai multe coloane, făcând col_index_num dinamică ar putea să vă economisească ceva timp. Mai sunt câteva ajustări de făcut:

    • Pentru col_index_num utilizați funcția COLUMNS, care returnează numărul de coloane dintr-o matrice specificată: COLUMNS($A$1:B$1). (Coordonata rândului nu contează, poate fi orice rând.)
    • În lookup_value blochează referința coloanei cu semnul $ ($A2), astfel încât aceasta să rămână fixă atunci când se copiază formula pe alte coloane.

    Ca rezultat, obțineți un fel de formulă dinamică care extrage valorile corespunzătoare din diferite coloane, în funcție de coloana în care este copiată formula:

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

    Atunci când este introdus în coloana B, COLUMNS($A$1:B$1) este evaluat la 2, ceea ce îi spune lui VLOOKUP să returneze o valoare din a doua coloană din matricea tabelului.

    Atunci când este copiată în coloana C (adică ați tras formula din B2 în C2), B$1 se schimbă în C$1 deoarece referința la coloană este relativă. În consecință, COLUMNS($A$1:C$1) evaluează 3, forțând VLOOKUP să returneze o valoare din a treia coloană.

    Această formulă funcționează foarte bine pentru 2 - 3 foi de căutare. Dacă aveți mai multe, IFERROR-urile repetitive devin prea greoaie. Următorul exemplu demonstrează o abordare puțin mai complicată, dar mult mai elegantă.

    Vlookup mai multe foi cu INDIRECT

    Încă o modalitate de a face Vlookup între mai multe foi în Excel este de a utiliza o combinație a funcțiilor VLOOKUP și INDIRECT. Această metodă necesită puțină pregătire, dar în final veți avea o formulă mai compactă pentru a face Vlookup în orice număr de foi de calcul.

    O formulă generică pentru Vlookup între foi este următoarea:

    VLOOKUP( lookup_value , INDIRECT("'"&INDEX( Foi_de_consultare , MATCH(1, --(COUNTIF(INDIRECT("'" & Foi_de_consultare & "'! gamă_de_cercetare "), lookup_value )>0), 0))) & "'! tabel_array "), col_index_num , FALSE)

    Unde:

    • Foi_de_consultare - un interval denumit constând din numele foilor de consultație.
    • Valoare_de_consultare - valoarea care trebuie căutată.
    • Intervalul de căutare - intervalul de coloane din foile de căutare în care se caută valoarea de căutare.
    • Tabel_array - intervalul de date din foile de consultații.
    • Col_index_num - numărul coloanei din tabloul tabelului din care se returnează o valoare.

    Pentru ca formula să funcționeze corect, vă rugăm să țineți cont de următoarele atenționări:

    • Este o formulă de matrice, care trebuie completată prin apăsarea simultană a tastelor Ctrl + Shift + Enter.
    • Toate foile trebuie să aibă aceeași ordine a coloanelor .
    • Deoarece folosim o singură matrice de tabele pentru toate foile de căutare, specificați cea mai mare gamă în cazul în care foile dvs. au numere diferite de rânduri.

    Cum se utilizează formula pentru Vlookup între foi

    Pentru a face Vlookup pe mai multe foi deodată, efectuați următorii pași:

    1. Scrieți toate numele foilor de căutare undeva în registrul de lucru și denumiți intervalul respectiv ( Foi_de_consultare în cazul nostru).

  • Ajustați formula generică pentru datele dvs. În acest exemplu, vom fi:
    • căutarea valorii A2 ( lookup_value )
    • în intervalul A2:A6 ( gamă_de_cercetare ) în patru fișe de lucru ( Est , Nord , Sud și Vest ), și
    • extrage valorile corespunzătoare din coloana B, care este coloana 2 ( col_index_num ) în intervalul de date A2:C6 ( tabel_array ).

    Cu argumentele de mai sus, formula are următoarea 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), 2, FALSE)

    Vă rugăm să observați că blocăm ambele intervale ($A$2:$A$6 și $A$2:$C$6) cu referințe absolute la celule.

  • Introduceți formula în celula cea mai de sus (B2 în acest exemplu) și apăsați Ctrl + Shift + Enter pentru a o completa.
  • Faceți dublu clic sau trageți mânerul de umplere pentru a copia formula în josul coloanei.
  • Ca rezultat, avem formula pentru a căuta numărul de ordine în 4 foi și a prelua articolul corespunzător. Dacă nu se găsește un anumit număr de ordine, se afișează o eroare #N/A, ca în rândul 14:

    Pentru a returna suma, înlocuiți pur și simplu 2 cu 3 în col_index_num deoarece sumele se află în a treia coloană a tabelului:

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

    Dacă doriți să înlocuiți notația de eroare standard #N/A cu propriul text, introduceți formula în funcția 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")

    Vlookup mai multe foi între registrele de lucru

    Această formulă generică (sau orice altă variantă a acesteia) poate fi utilizată și pentru a face Vlookup pe mai multe foi într-un fișier registru de lucru diferit Pentru aceasta, concatenați numele registrului de lucru în INDIRECT, așa cum se arată în formula de mai jos:

    =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 între foi și returnarea mai multor coloane

    Dacă doriți să extrageți date din mai multe coloane, se poate utiliza un fișier formula de matrice cu mai multe celule poate face acest lucru dintr-o singură încercare. Pentru a crea o astfel de formulă, furnizați o constantă de matrice pentru col_index_num argument.

    În acest exemplu, dorim să returnăm numele articolelor (coloana B) și sumele (coloana C), care sunt a doua și, respectiv, a treia coloană din tabloul tabelului. Așadar, tabloul necesar este {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)

    Pentru a introduce corect formula în mai multe celule, iată ce trebuie să faceți:

    • În primul rând, selectați toate celulele care urmează să fie completate (B2:C2 în exemplul nostru).
    • Tastați formula și apăsați Ctrl + Shift + Enter . Astfel se introduce aceeași formulă în celulele selectate, care va returna o valoare diferită în fiecare coloană.
    • Trageți formula în jos pe rândurile rămase.

    Cum funcționează această formulă

    Pentru a înțelege mai bine logica, haideți să descompunem această formulă de bază în funcții individuale:

    =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), 2, FALSE)

    Lucrând din interior spre exterior, iată ce face această formulă:

    COUNTIF și INDIRECT

    Pe scurt, INDIRECT construiește referințele pentru toate foile de căutare, iar COUNTIF numără aparițiile valorii de căutare (A2) în fiecare foaie:

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

    Mai multe detalii:

    În primul rând, concatenați numele intervalului (Lookup_sheets) și referința intervalului ($A$2:$A$6), adăugând apostrofuri și semnul exclamării în locurile potrivite pentru a face o referință externă, și introduceți șirul de text rezultat în funcția INDIRECT pentru a face referire dinamică la foile de căutare:

    INDIRECT({"'Est'!$A$2:$A$6"; "'Sud'!$A$2:$A$6"; "'Nord'!$A$2:$A$6"; "'Vest'!$A$2:$A$6"})

    COUNTIF verifică fiecare celulă din intervalul A2:A6 de pe fiecare foaie de căutare în raport cu valoarea din A2 de pe foaia principală și returnează numărul de potriviri pentru fiecare foaie. În setul nostru de date, numărul de ordine din A2 (101) se găsește în Vest care se află pe locul 4 în intervalul menționat, astfel încât COUNTIF returnează acest tablou:

    {0;0;0;1}

    În continuare, comparați fiecare element al matricei de mai sus cu 0:

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

    Acest lucru produce un tablou de valori TRUE (mai mare decât 0) și FALSE (egal cu 0), pe care le transformați în 1 și 0 folosind un dublu unar (--) și obțineți următorul tablou ca rezultat:

    {0; 0; 0; 1}

    Această operațiune este o măsură de precauție suplimentară pentru a face față situației în care o foaie de căutare conține mai multe apariții ale valorii de căutare, caz în care COUNTIF ar returna un număr mai mare de 1, în timp ce noi dorim doar 1 și 0 în matricea finală (într-un moment, veți înțelege de ce).

    După toate aceste transformări, formula noastră arată după cum urmează:

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

    INDEX și MATCH

    În acest moment, intervine o combinație clasică de INDEX MATCH:

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

    Funcția MATCH configurată pentru potrivire exactă (0 în ultimul argument) caută valoarea 1 în matricea {0;0;0;0;1} și returnează poziția acesteia, care este 4:

    INDEX(Lookup_sheets, 4)

    Funcția INDEX utilizează numărul returnat de MATCH ca argument pentru numărul rândului (row_num) și returnează a patra valoare din intervalul numit Foi_de_consultare , care este Vest .

    Deci, formula se reduce la:

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

    VLOOKUP și INDIRECT

    Funcția INDIRECT procesează șirul de text din interiorul ei:

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

    Și o convertește într-o referință care merge la tabel_array argument al VLOOKUP:

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

    În cele din urmă, această formulă VLOOKUP foarte standard caută valoarea A2 în prima coloană a intervalului A2:C6 de pe Vest și returnează o potrivire din coloana a 2-a. Asta este!

    VLOOKUP dinamic pentru a returna date din mai multe foi în celule diferite

    În primul rând, haideți să definim ce înseamnă exact cuvântul "dinamic" în acest context și în ce fel această formulă va fi diferită de cele anterioare.

    În cazul în care aveți bucăți mari de date în același format care sunt împărțite în mai multe foi de calcul, este posibil să doriți să extrageți informații din diferite foi în celule diferite. Imaginea de mai jos ilustrează conceptul:

    Spre deosebire de formulele anterioare care au recuperat o valoare dintr-o foaie specifică pe baza unui identificator unic, de data aceasta dorim să extragem valori din mai multe foi deodată.

    Există două soluții diferite pentru această sarcină. În ambele cazuri, trebuie să faceți o mică muncă pregătitoare și să creați intervale numite pentru celulele de date din fiecare foaie de căutare. Pentru acest exemplu, am definit următoarele intervale:

    • Vânzări_Est - A2:B6 pe foaia de est
    • Nord_Vânzări - A2:B6 pe foaia nordică
    • Vânzări_Sud - A2:B6 pe foaia Sud
    • West_Sales - A2:B6 pe foaia de vest

    VLOOKUP și IF-uri imbricate

    Dacă aveți un număr rezonabil de foi de consultat, puteți utiliza funcții IF imbricate pentru a selecta foaia pe baza cuvintelor cheie din celulele predefinite (celulele B1 până la D1 în cazul nostru).

    Cu valoarea de căutare din A2, formula este următoarea:

    =VLOOKUP($A2, IF(B$1="est", East_Sales, IF(B$1="nord", North_Sales, IF(B$1="sud", South_Sales, IF(B$1="vest", West_Sales)))), 2, FALSE)

    Tradusă în limba engleză, partea IF sună astfel:

    Dacă B1 este Est , căutați în intervalul numit Vânzări_Est ; dacă B1 este Nord , căutați în intervalul numit Nord_Vânzări ; dacă B1 este Sud , căutați în intervalul numit Vânzări_Sud ; și dacă B1 este Vest , căutați în intervalul numit West_Sales .

    Intervalul returnat de IF merge până la tabel_array de VLOOKUP, care extrage o valoare corespunzătoare din a doua coloană a foii corespunzătoare.

    Utilizarea inteligentă a referințelor mixte pentru valoarea de căutare ($A2 - coloană absolută și rând relativ) și testul logic IF (B$1 - coloană relativă și rând absolut) permite copierea formulei în alte celule fără nicio modificare - Excel ajustează automat referințele pe baza poziției relative a unui rând și a unei coloane.

    Așadar, introducem formula în B2, o copiem în dreapta și în jos pe câte coloane și rânduri sunt necesare și obținem următorul rezultat:

    VLOOKUP INDIRECT

    Atunci când se lucrează cu mai multe foi, mai multe niveluri imbricate ar putea face ca formula să fie prea lungă și greu de citit. O modalitate mult mai bună este de a crea un fișier interval de vlookup dinamic cu ajutorul INDIRECT:

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

    Aici, concatenăm referința la celula care conține o parte unică a intervalului numit (B1) și partea comună (_Sales). Acest lucru produce un șir de text precum "East_Sales", pe care INDIRECT îl convertește în numele intervalului pe care Excel îl înțelege.

    Ca rezultat, obțineți o formulă compactă care funcționează minunat pe orice număr de foi:

    Iată cum se face Vlookup între foi și fișiere în Excel. Vă mulțumesc pentru lectură și sper să ne revedem pe blog săptămâna viitoare!

    Caietul de practică pentru descărcare

    Exemple de foi multiple Vlookup (fișier .xlsx)

    Michael Brown este un pasionat de tehnologie dedicat, cu o pasiune pentru simplificarea proceselor complexe folosind instrumente software. Cu mai mult de un deceniu de experiență în industria tehnologiei, el și-a perfecționat abilitățile în Microsoft Excel și Outlook, precum și în Google Sheets și Docs. Blogul lui Michael este dedicat împărtășirii cunoștințelor și experienței sale cu alții, oferind sfaturi și tutoriale ușor de urmat pentru îmbunătățirea productivității și eficienței. Indiferent dacă sunteți un profesionist experimentat sau un începător, blogul lui Michael oferă informații valoroase și sfaturi practice pentru a profita la maximum de aceste instrumente software esențiale.