Popolare automaticamente una tabella da un'altra tabella se viene soddisfatto un criterio


0

Ho due tabelle: Informazioni ed Elenco.

La tabella Informazioni ha due colonne: Nome e Sesso.

La tabella Elenco ha anche due colonne: maschio e femmina.

Sto cercando di popolare automaticamente la tabella Elenco con i nomi delle persone che sono maschi o femmine, usando le formule.

Ho provato a usare INDEX()eMATCH()

=INDEX(A:A, MATCH(D1, B:B, 0),1)

ma restituisce solo il nome con il genere corrispondente.

Qualche idea?

Risposte:


2

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:

Schermata del foglio di lavoro

Array inserisci ( Ctrl+ Shift+ Enter) la seguente formula in D2e copia-incolla / riempi-giù / riempi-a destra nel resto delle colonne della tabella De 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 FALSEaltrimenti: 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 2o se dopo aver inserito le righe della formula vengono inserite / eliminate sopra la prima riga di dati della tabella Elenco, la ROW()-1parte 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)),"")}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.