Poiché i dati con corrispondenza salta le righe, non è possibile utilizzare una semplice formula indice / corrispondenza per estrarre i nomi (senza utilizzare le colonne helper, ovvero).
La soluzione più semplice richiede l'uso di una formula di array:
Array inserisci ( Ctrl+ Shift+ Enter) la seguente formula in D2
e copia-incolla / riempi-giù / riempi-a destra nel resto delle colonne della tabella D
e E
(non dimenticare di rimuovere il {
e }
):
{=IFERROR(INDEX($A:$A,SMALL(IF($B$2:$B$7=D$1,ROW($B$2:$B$7),FALSE),ROW()-1)),"")}
La formula funziona inizialmente costruzione di una matrice che contiene l'indice di riga se il genere corrisponde, o FALSE
altrimenti: IF($B$2:$B$7=D$1,ROW($B$2:$B$7),FALSE)
.
Allora la SMALL()
funzione viene utilizzato per estrarre il successivo piccolo indice corrispondente alla riga di dati della tabella dall'editore SMALL({…},ROW()-1)
. Il motivo per cui funziona è che la SMALL()
funzione ignora i valori booleani.
Si noti che, se si immette la formula in una riga diversa dalla riga 2
o se dopo aver inserito le righe della formula vengono inserite / eliminate sopra la prima riga di dati della tabella Elenco, la ROW()-1
parte deve essere regolata in modo che il risultato sia 1 per la prima riga di dati .
Infine, questo indice viene utilizzato per estrarre il nome appropriato: .INDEX($A:$A,<next smallest index>)
È IFERROR()
lì solo per nascondere gli #NUM!
errori che si verificano quando la SMALL()
funzione esaurisce gli indici validi da restituire.
Segue una versione più solida, ma più complicata, della formula che si adatta automaticamente al numero di righe di dati nella tabella Informazioni e non si interromperà se le righe vengono inserite / eliminate sopra la prima riga di dati della tabella Elenco, come segue:
{=IFERROR(INDEX($A:$A,SMALL(IF($B$1:INDEX($B:$B,COUNTA($B:$B))=D$1,ROW($B$1:INDEX($B:$B,COUNTA($B:$B))),FALSE),ROW()-ROW($B$2)+1)),"")}