Formula Excel: XLOOKUP con criteri multipli complessi -

Sommario

Sommario

Per cercare i dati in base a più criteri complessi, è possibile utilizzare la funzione XLOOKUP con più espressioni basate sulla logica booleana. Nell'esempio mostrato, la formula in G5 è:

=XLOOKUP(1,(LEFT(B5:B16)="x")*(C5:C16="east")*NOT(MONTH(D5:D16)=4),B5:E16)

Con le impostazioni predefinite di XLOOKUP per la modalità di corrispondenza (esatta) e la modalità di ricerca (dal primo all'ultimo), la formula corrisponde al primo record in cui:

l'account inizia con "x" E la regione è "est" e il mese NON è aprile.

che è il quarto record (riga 8) nell'esempio mostrato.

Spiegazione

Normalmente, la funzione XLOOKUP è configurata per cercare un valore in una matrice di ricerca presente nel foglio di lavoro. Tuttavia, quando i criteri utilizzati per abbinare un valore diventano più complessi, è possibile utilizzare la logica booleana per creare al volo un array di ricerca composto solo da 1 e 0, quindi cercare il valore 1. Questo è l'approccio utilizzato in questo esempio:

=XLOOKUP(1,boolean_array,result_array)

In questo esempio, i criteri richiesti sono:

l'account inizia con "x" E la regione è "est" e il mese NON è aprile.

Per ciascuno dei tre criteri separati sopra, usiamo un'espressione logica separata. La prima espressione utilizza la funzione SINISTRA per verificare se Account inizia con "x":

LEFT(B5:B16)="x" // account begins with "x"

Poiché stiamo controllando dodici valori, il risultato è un array con dodici valori come questo:

(TRUE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE;TRUE)

La seconda espressione verifica se Region è "east" utilizzando l'operatore uguale a (=):

C5:C16="east" // region is east

Come prima, otteniamo un altro array con dodici valori TRUE FALSE:

(FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;TRUE)

La terza espressione deve escludere il mese di aprile. Il modo più semplice per farlo è provare per il mese di aprile direttamente con la funzione MESE:

MONTH(D5:D16)=4 // month is April

Quindi utilizzare la funzione NOT per invertire il risultato:

NOT(MONTH(D5:D16)=4) // month is not April

che crea un array che descrive correttamente "non aprile":

(FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE)

Successivamente, tutti e tre gli array vengono moltiplicati insieme e l'operazione matematica costringe i valori VERO e FALSO a 1 e 0:

(1;0;1;1;1;0;0;0;1;1;0;1)* (0;0;1;1;1;0;1;0;0;1;0;1)* (0;0;0;1;1;1;1;1;1;1;1;1)

Nell'aritmetica booleana, la moltiplicazione funziona come la funzione logica AND, quindi il risultato finale è un singolo array come questo:

(0;0;0;1;1;0;0;0;0;1;0;1)

La formula può ora essere riscritta in questo modo:

=XLOOKUP(1,(0;0;0;1;1;0;0;0;0;1;0;1),B5:E16)

Con 1 come valore di ricerca e le impostazioni predefinite per la modalità di corrispondenza (esatta) e la modalità di ricerca (dal primo all'ultimo), XLOOKUP corrisponde al primo 1 (quarta posizione) e restituisce la riga corrispondente nella matrice dei risultati, che è B8: E8.

Ultima partita

Impostando l'argomento della modalità di ricerca opzionale su -1, puoi individuare l '"ultima corrispondenza" con gli stessi criteri in questo modo:

=XLOOKUP(1,(LEFT(B5:B16)="x")*(C5:C16="east")*NOT(MONTH(D5:D16)=4),B5:E16,,,-1)

Articoli interessanti...