Formule Excel: XLOOKUP avec plusieurs critères complexes -

Table des matières

Sommaire

Pour rechercher des données en fonction de plusieurs critères complexes, vous pouvez utiliser la fonction XLOOKUP avec plusieurs expressions basées sur la logique booléenne. Dans l'exemple illustré, la formule en G5 est:

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

Avec les paramètres par défaut de XLOOKUP pour le mode de correspondance (exact) et le mode de recherche (du premier au dernier), la formule correspond au premier enregistrement où:

le compte commence par «x» ET la région est «est», et le mois n'est PAS avril.

qui est le quatrième enregistrement (ligne 8) dans l'exemple illustré.

Explication

Normalement, la fonction XLOOKUP est configurée pour rechercher une valeur dans un tableau de recherche qui existe sur la feuille de calcul. Cependant, lorsque les critères utilisés pour faire correspondre une valeur deviennent plus complexes, vous pouvez utiliser la logique booléenne pour créer un tableau de recherche à la volée composé uniquement de 1 et de 0, puis recherchez la valeur 1. C'est l'approche utilisée dans cet exemple:

=XLOOKUP(1,boolean_array,result_array)

Dans cet exemple, le critère requis est:

le compte commence par «x» ET la région est «est», et le mois n'est PAS avril.

Pour chacun des trois critères distincts ci-dessus, nous utilisons une expression logique distincte. La première expression utilise la fonction GAUCHE pour tester si le compte commence par "x":

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

Parce que nous vérifions douze valeurs, le résultat est un tableau avec douze valeurs comme ceci:

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

La deuxième expression teste si Region est "east" en utilisant l'opérateur égal à (=):

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

Comme précédemment, nous obtenons un autre tableau avec douze valeurs TRUE FALSE:

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

La troisième expression doit exclure le mois d'avril. Le moyen le plus simple de procéder est de tester le mois d'avril directement avec la fonction MONTH:

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

Ensuite, utilisez la fonction NOT pour inverser le résultat:

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

qui crée un tableau décrivant correctement "pas avril":

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

Ensuite, les trois tableaux sont multipliés ensemble et l'opération mathématique contraint les valeurs VRAI et FAUX à 1 et 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)

En arithmétique booléenne, la multiplication fonctionne comme la fonction logique ET, donc le résultat final est un tableau unique comme celui-ci:

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

La formule peut maintenant être réécrite comme ceci:

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

Avec 1 comme valeur de recherche et les paramètres par défaut pour le mode de correspondance (exact) et le mode de recherche (du premier au dernier), XLOOKUP correspond au premier 1 (quatrième position) et renvoie la ligne correspondante dans le tableau de résultats, qui est B8: E8.

Dernier match

En définissant l'argument du mode de recherche optionnel sur -1, vous pouvez localiser la "dernière correspondance" avec les mêmes critères comme ceci:

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

Articles intéressants...