Sommario
L'esercitazione mostra come utilizzare la funzione VLOOKUP per copiare i dati da un altro foglio di lavoro o da un'altra cartella di lavoro, per eseguire Vlookup in più fogli e per eseguire ricerche dinamiche per riportare valori da fogli diversi in celle diverse.
Quando si cercano informazioni in Excel, è raro che tutti i dati si trovino nello stesso foglio. Più spesso, invece, è necessario cercare in più fogli o addirittura in diverse cartelle di lavoro. La buona notizia è che Microsoft Excel offre più di un modo per farlo, mentre la cattiva notizia è che tutti i modi sono un po' più complicati di una formula VLOOKUP standard. Ma con un po' di pazienza, possiamoli scoprirà :)
Come eseguire un VLOOKUP tra due fogli
Per cominciare, analizziamo il caso più semplice: l'uso di VLOOKUP per copiare i dati da un altro foglio di lavoro. È molto simile a una normale formula VLOOKUP che cerca nello stesso foglio di lavoro. La differenza è che si include il nome del foglio nella formula tabella_array per indicare alla formula in quale foglio di lavoro si trova l'intervallo di ricerca.
La formula generica per VLOOKUP da un altro foglio è la seguente:
VLOOKUP(lookup_value, Foglio!gamma , col_index_num, [range_lookup])A titolo di esempio, prendiamo i dati di vendita di Gennaio rapporto a Sintesi A tal fine, definiamo i seguenti argomenti:
- Valori_di_ricerca sono nella colonna A del Sintesi e facciamo riferimento alla prima cella di dati, che è A2.
- Tabella_array è l'intervallo A2:B6 del foglio Jan. Per farvi riferimento, anteporre al riferimento dell'intervallo il nome del foglio seguito dal punto esclamativo: Jan!$A$2:$B$6.
Si prega di prestare attenzione al fatto che l'intervallo viene bloccato con riferimenti assoluti alla cella per evitare che cambi quando si copia la formula in altre celle.
Numero_colonna_indice è 2 perché si vuole copiare un valore dalla colonna B, che è la seconda colonna dell'array di tabelle.
- Ricerca_intervallo è impostato su FALSE per cercare una corrispondenza esatta.
Mettendo insieme i ragionamenti, si ottiene questa formula:
=VLOOKUP(A2, Jan!$A$2:$B$6, 2, FALSE)
Trascinate la formula lungo la colonna e otterrete questo risultato:
In modo analogo, è possibile effettuare Vlookup dei dati dal file Febbraio e Mar fogli:
=VLOOKUP(A2, Feb!$A$2:$B$6, 2, FALSE)
=VLOOKUP(A2, Mar!$A$2:$B$6, 2, FALSE)
Suggerimenti e note:
- Se il nome del foglio contiene spazi o caratteri non alfabetici deve essere racchiuso tra virgolette singole, come ad esempio Vendite di gennaio! $A$2:$B$6 Per ulteriori informazioni, vedere Come fare riferimento a un altro foglio in Excel.
- Invece di digitare il nome del foglio direttamente in una formula, si può passare al foglio di lavoro di ricerca e selezionare l'intervallo. Excel inserirà automaticamente un riferimento con la sintassi corretta, risparmiandovi la fatica di controllare il nome e risolvere i problemi.
Vlookup da una cartella di lavoro diversa
Per eseguire un VLOOKUP tra due cartelle di lavoro, includere il nome del file tra parentesi quadre, seguito dal nome del foglio e dal punto esclamativo.
Ad esempio, per cercare il valore A2 nell'intervallo A2:B6 su Gennaio nella scheda Rapporti_di_vendita.xlsx cartella di lavoro, utilizzare questa formula:
=VLOOKUP(A2, [Sales_reports.xlsx]Jan!$A$2:$B$6, 2, FALSE)
Per maggiori dettagli, consultate VLOOKUP da un'altra cartella di lavoro in Excel.
Vlookup su più fogli con IFERROR
Quando è necessario cercare tra più di due fogli, la soluzione più semplice è utilizzare VLOOKUP in combinazione con IFERROR. L'idea è quella di annidare diverse funzioni IFERROR per controllare più fogli di lavoro uno alla volta: se il primo VLOOKUP non trova una corrispondenza nel primo foglio, si cerca nel foglio successivo e così via.
IFERROR(VLOOKUP(...), IFERROR(VLOOKUP(...), ..., " Non trovato "))Per vedere come funziona questo approccio su dati reali, consideriamo il seguente esempio. Di seguito è riportato il file Sintesi che vogliamo popolare con i nomi degli articoli e gli importi cercando il numero d'ordine in Ovest e Est fogli:
Per prima cosa, si estraggono gli articoli. A tal fine, si istruisce la formula VLOOKUP a cercare il numero d'ordine in A2 nella tabella Est e restituire il valore della colonna B (seconda colonna in tabella_array A2:C6). Se non si trova una corrispondenza esatta, si cerca nella sezione Ovest Se entrambe le Vlookup falliscono, restituire "Non trovato".
=IFERROR(VLOOKUP(A2, Est!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, Ovest!$A$2:$C$6, 2, FALSE), "Non trovato"))
Per restituire l'importo, basta cambiare il numero dell'indice della colonna in 3:
=IFERROR(VLOOKUP(A2, Est!$A$2:$C$6, 3, FALSE), IFERROR(VLOOKUP(A2, Ovest!$A$2:$C$6, 3, FALSE), "Non trovato"))
Suggerimento: se necessario, è possibile specificare array di tabelle diversi per le diverse funzioni VLOOKUP. In questo esempio, entrambi i fogli di ricerca hanno lo stesso numero di righe (A2:C6), ma i fogli di lavoro possono avere dimensioni diverse.
Vlookup in più cartelle di lavoro
Per eseguire un Vlookup tra due o più cartelle di lavoro, racchiudere il nome della cartella di lavoro tra parentesi quadre e anteporlo al nome del foglio. due file diversi ( Libro1 e Libro2 ) con un'unica formula:
=IFERROR(VLOOKUP(A2, [Book1.xlsx]East!$A$2:$C$6, 2, FALSE), IFERROR(VLOOKUP(A2, [Book2.xlsx]West!$A$2:$C$6, 2, FALSE), "Non trovato"))
Rendere dinamico il numero dell'indice della colonna per Vlookup su più colonne
Nel caso in cui sia necessario restituire i dati di più colonne, è necessario fare in modo che col_index_num La dinamica potrebbe farvi risparmiare un po' di tempo. Ci sono un paio di aggiustamenti da fare:
- Per il col_index_num utilizzare la funzione COLUMNS che restituisce il numero di colonne di un array specificato: COLUMNS($A$1:B$1). (La coordinata della riga non ha importanza, può essere una riga qualsiasi).
- Nel valore_di_ricerca blocca il riferimento alla colonna con il segno $ ($A2), in modo che rimanga fisso quando si copia la formula su altre colonne.
Il risultato è una sorta di formula dinamica che estrae i valori corrispondenti da colonne diverse, a seconda della colonna in cui viene copiata la formula:
=IFERROR(VLOOKUP($A2, Est!$A$2:$C$6, COLONNE($A$1:B$1), FALSE), IFERROR(VLOOKUP($A2, Ovest!$A$2:$C$6, COLONNE($A$1:B$1), FALSE), "Non trovato"))
Quando si inserisce la colonna B, COLUMNS($A$1:B$1) valuta 2 e dice a VLOOKUP di restituire un valore dalla seconda colonna dell'array della tabella.
Quando viene copiata nella colonna C (cioè trascinando la formula da B2 a C2), B$1 cambia in C$1 perché il riferimento alla colonna è relativo. Di conseguenza, COLUMNS($A$1:C$1) valuta 3, costringendo VLOOKUP a restituire un valore dalla terza colonna.
Questa formula funziona bene per 2 o 3 fogli di ricerca. Se il numero di fogli è maggiore, gli IFERROR ripetitivi diventano troppo ingombranti. L'esempio successivo mostra un approccio un po' più complicato ma molto più elegante.
Vlookup di più fogli con INDIRETTO
Un altro modo per eseguire Vlookup tra più fogli in Excel è quello di utilizzare una combinazione delle funzioni VLOOKUP e INDIRECT. Questo metodo richiede un po' di preparazione, ma alla fine si otterrà una formula più compatta per eseguire Vlookup in qualsiasi numero di fogli di lavoro.
Una formula generica per Vlookup tra i fogli è la seguente:
VLOOKUP( valore_di_ricerca , INDIRETTO("'"&INDICE( Fogli di ricerca , MATCH(1, --(COUNTIF(INDIRECT("'" & Fogli di ricerca & "'! intervallo_di_ricerca "), valore_di_ricerca )>0), 0)) & "'! tabella_array "), col_index_num , FALSO)Dove:
- Fogli di ricerca - un intervallo denominato composto dai nomi dei fogli di ricerca.
- Valore_di_ricerca - il valore da cercare.
- Intervallo_di_ricerca - l'intervallo di colonne nei fogli di ricerca in cui cercare il valore di ricerca.
- Tabella_array - l'intervallo di dati nei fogli di ricerca.
- Numero_colonna_indice - il numero della colonna dell'array di tabelle da cui restituire un valore.
Affinché la formula funzioni correttamente, tenere presente le seguenti avvertenze:
- Si tratta di una formula di array, che deve essere completata premendo insieme i tasti Ctrl + Shift + Invio.
- Tutti i fogli devono avere la dicitura stesso ordine delle colonne .
- Poiché si utilizza un array di tabelle per tutti i fogli di ricerca, specificare il parametro gamma più ampia se i fogli hanno un numero diverso di righe.
Come utilizzare la formula di Vlookup tra i vari fogli
Per eseguire Vlookup su più fogli alla volta, procedere come segue:
- Scrivete tutti i nomi dei fogli di ricerca da qualche parte nella cartella di lavoro e date un nome all'intervallo ( Fogli di ricerca nel nostro caso).
- alla ricerca del valore A2 ( valore_di_ricerca )
- nell'intervallo A2:A6 ( intervallo_di_ricerca ) in quattro fogli di lavoro ( Est , Nord , Sud e Ovest ), e
- estrarre i valori corrispondenti dalla colonna B, che è la colonna 2 ( col_index_num ) nell'intervallo di dati A2:C6 ( tabella_array ).
Con gli argomenti di cui sopra, la formula assume questa 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)
Si noti che abbiamo bloccato entrambi gli intervalli ($A$2:$A$6 e $A$2:$C$6) con riferimenti assoluti alle celle.
Il risultato è una formula che cerca il numero d'ordine in 4 fogli e recupera l'articolo corrispondente. Se non viene trovato un numero d'ordine specifico, viene visualizzato un errore #N/A come nella riga 14:
Per restituire l'importo, è sufficiente sostituire 2 con 3 nel parametro col_index_num come importi nella terza colonna dell'array di tabelle:
=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)
Se si desidera sostituire la notazione di errore standard #N/A con un testo proprio, è possibile inserire la formula nella funzione 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), "Non trovato")
Vlookup più fogli tra cartelle di lavoro
Questa formula generica (o qualsiasi sua variante) può essere utilizzata anche per eseguire Vlookup su più fogli in un file cartella di lavoro diversa Per questo, concatenare il nome della cartella di lavoro all'interno di INDIRECT come mostrato nella formula seguente:
=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), "Non trovato")
Vlookup tra fogli e restituzione di più colonne
Se si desidera estrarre i dati da più colonne, si può utilizzare un'opzione formula della matrice multicella Per creare una formula di questo tipo, è sufficiente fornire una costante dell'array per il parametro col_index_num argomento.
In questo esempio, vogliamo restituire i nomi degli articoli (colonna B) e gli importi (colonna C), che sono rispettivamente la seconda e la terza colonna dell'array della tabella. Pertanto, l'array richiesto è {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 inserire correttamente la formula in più celle, è necessario procedere in questo modo:
- Nella prima riga, selezionare tutte le celle da popolare (B2:C2 nel nostro esempio).
- Digitare la formula e premere Ctrl + Maiusc + Invio per inserire la stessa formula nelle celle selezionate, che restituirà un valore diverso in ogni colonna.
- Trascinare la formula sulle righe rimanenti.
Come funziona questa formula
Per capire meglio la logica, scomponiamo questa formula di base nelle singole funzioni:
=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)
Lavorando dall'interno verso l'esterno, ecco cosa fa la formula:
COUNTIF e INDIRETTO
In breve, INDIRECT crea i riferimenti per tutti i fogli di ricerca e COUNTIF conta le occorrenze del valore di ricerca (A2) in ciascun foglio:
--(COUNTIF( INDIRECT("'"&Lookup_sheets&"'!$A$2:$A$6"), $A2)>0)
In dettaglio:
Per prima cosa, si concatena il nome dell'intervallo (Lookup_sheets) e il riferimento all'intervallo ($A$2:$A$6), aggiungendo gli apostrofi e il punto esclamativo nei punti giusti per creare un riferimento esterno, e si dà la stringa di testo risultante alla funzione INDIRECT per fare riferimento dinamicamente ai fogli di ricerca:
INDIRETTO({"'Est'!$A$2:$A$6"; "'Sud'!$A$2:$A$6"; "'Nord'!$A$2:$A$6"; "'Ovest'!$A$2:$A$6"})
COUNTIF controlla ogni cella dell'intervallo A2:A6 di ciascun foglio di ricerca rispetto al valore in A2 del foglio principale e restituisce il conteggio delle corrispondenze per ciascun foglio. Nel nostro set di dati, il numero d'ordine in A2 (101) si trova nel foglio Ovest che è il quarto nell'intervallo nominato, quindi COUNTIF restituisce questo array:
{0;0;0;1}
Successivamente, si confronta ogni elemento della matrice precedente con 0:
--({0; 0; 0; 1}>0)
Questo produce un array di valori TRUE (maggiori di 0) e FALSE (uguali a 0), che vengono coerciti in 1 e 0 usando un doppio unario (--), ottenendo come risultato il seguente array:
{0; 0; 0; 1}
Questa operazione è una precauzione in più per gestire una situazione in cui un foglio di ricerca contiene diverse occorrenze del valore di ricerca, nel qual caso COUNTIF restituirebbe un conteggio maggiore di 1, mentre noi vogliamo solo 1 e 0 nell'array finale (tra poco capirete perché).
Dopo tutte queste trasformazioni, la nostra formula si presenta come segue:
VLOOKUP($A2, INDIRECT("'"&INDEX(Lookup_sheets, MATCH(1, {0;0;0;1} , 0)) &"'!$A$2:$C$6"), 2, FALSE)
INDICE e MATCH
A questo punto interviene una classica combinazione di INDEX MATCH:
INDEX(Lookup_sheets, MATCH(1, {0;0;0;1}, 0))
La funzione MATCH configurata per la corrispondenza esatta (0 nell'ultimo argomento) cerca il valore 1 nella matrice {0;0;0;1} e restituisce la sua posizione, che è 4:
INDICE(Fogli di ricerca, 4)
La funzione INDEX utilizza il numero restituito da MATCH come argomento del numero di riga (row_num) e restituisce il quarto valore nell'intervallo denominato Fogli di ricerca , che è Ovest .
Quindi, la formula si riduce ulteriormente a:
VLOOKUP($A2, INDIRECT("'"&" West "&"'!$A$2:$C$6"), 2, FALSE)
VLOOKUP e INDIRETTO
La funzione INDIRETTO elabora la stringa di testo al suo interno:
INDIRETTO("'"& "West"&"'$A$2:$C$6")
E lo converte in un riferimento che va al file tabella_array argomento di VLOOKUP:
VLOOKUP($A2, 'Ovest'!$A$2:$C$6 , 2, FALSE)
Infine, questa formula VLOOKUP molto standard cerca il valore A2 nella prima colonna dell'intervallo A2:C6 sul foglio di lavoro Ovest e restituisce una corrispondenza dalla seconda colonna. Ecco fatto!
VLOOKUP dinamico per riportare i dati da più fogli in celle diverse
Innanzitutto, definiamo cosa significa esattamente la parola "dinamico" in questo contesto e come questa formula sarà diversa dalle precedenti.
Nel caso in cui si disponga di grandi quantità di dati nello stesso formato, suddivisi in più fogli di calcolo, è possibile estrarre le informazioni da fogli diversi in celle diverse. L'immagine seguente illustra il concetto:
A differenza delle formule precedenti che recuperavano un valore da un foglio specifico in base a un identificatore univoco, questa volta cerchiamo di estrarre valori da più fogli alla volta.
Esistono due soluzioni diverse per questo compito. In entrambi i casi, è necessario fare un po' di lavoro preparatorio e creare intervalli denominati per le celle di dati in ogni foglio di ricerca. Per questo esempio, abbiamo definito i seguenti intervalli:
- Est_Vendite - A2:B6 sul foglio Est
- Nord_Vendite - A2:B6 sul foglio Nord
- Sud_Vendite - A2:B6 sul foglio Sud
- Vendite_Ovest - A2:B6 sul foglio ovest
VLOOKUP e IF annidati
Se si dispone di un numero ragionevole di fogli da consultare, è possibile utilizzare funzioni IF annidate per selezionare il foglio in base alle parole chiave contenute nelle celle predefinite (da B1 a D1 nel nostro caso).
Con il valore di ricerca in A2, la formula è la seguente:
=VLOOKUP($A2, IF(B$1="est", East_Sales, IF(B$1="nord", North_Sales, IF(B$1="sud", South_Sales, IF(B$1="ovest", West_Sales)))), 2, FALSE)
Tradotta in inglese, la parte IF recita:
Se B1 è Est , cercare nell'intervallo denominato Est_Vendite Se B1 è Nord , cercare nell'intervallo denominato Nord_Vendite Se B1 è Sud , cercare nell'intervallo denominato Sud_Vendite e se B1 è Ovest , cercare nell'intervallo denominato Vendite_Ovest .
L'intervallo restituito da IF va a tabella_array di VLOOKUP, che estrae un valore corrispondente dalla seconda colonna del foglio corrispondente.
L'uso intelligente di riferimenti misti per il valore di ricerca ($A2 - colonna assoluta e riga relativa) e il test logico di IF (B$1 - colonna relativa e riga assoluta) consente di copiare la formula in altre celle senza alcuna modifica: Excel regola automaticamente i riferimenti in base alla posizione relativa di una riga e di una colonna.
Quindi, inseriamo la formula in B2, la copiamo a destra e in basso su tutte le colonne e le righe necessarie e otteniamo il seguente risultato:
VLOOKUP INDIRETTO
Quando si lavora con molti fogli, più livelli annidati potrebbero rendere la formula troppo lunga e difficile da leggere. Un modo decisamente migliore è quello di creare un file intervallo dinamico di vlookup con l'aiuto di INDIRETTO:
=VLOOKUP($A2, INDIRECT(B$1&"_Vendite"), 2, FALSE)
In questo caso, si concatena il riferimento alla cella che contiene una parte unica dell'intervallo denominato (B1) e la parte comune (_Vendite). Si ottiene così una stringa di testo come "Est/Vendite", che INDIRETTO converte nel nome dell'intervallo comprensibile da Excel.
Il risultato è una formula compatta che funziona egregiamente su qualsiasi numero di fogli:
Ecco come eseguire Vlookup tra fogli e file in Excel. Vi ringrazio per la lettura e spero di vedervi sul nostro blog la prossima settimana!
Eserciziario da scaricare
Esempi di Vlookup su più fogli (file .xlsx)