
Formule générique
=LOOKUP(2,1/(item="hat"),price)
Sommaire
Pour rechercher le dernier prix d'un produit dans une liste, triés de manière à ce que les derniers articles apparaissent en dernier, vous pouvez utiliser une formule basée sur la fonction LOOKUP. Dans l'exemple, la formule dans G7 est:
=LOOKUP(2,1/(item=F7),price)
où item est la plage nommée B5: B12, le prix est la plage nommée D5: D12 et les données sont triées par date.
Explication
La fonction LOOKUP suppose que les données sont triées et effectue toujours une correspondance approximative. Si la valeur de recherche est supérieure à toutes les valeurs du tableau de recherche, le comportement par défaut consiste à "revenir" à la valeur précédente. Cette formule exploite ce comportement en créant un tableau qui ne contient que des 1 et des erreurs, puis en recherchant délibérément la valeur 2, qui ne sera jamais trouvée.
Tout d'abord, cette expression est évaluée:
item=F7
Lorsque F7 contient des «sandales», le résultat est un tableau de valeurs TRUE et FALSE comme ceci:
(FALSE;TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE)
Ce tableau est fourni comme diviseur de 1:
1/(FALSE;TRUE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE)
L'opération mathématique contraint automatiquement les valeurs TRUE et FALSE à 1 et 0, donc le résultat est un autre tableau comme celui-ci:
(#DIV/0!;1;#DIV/0!;1;#DIV/0!;#DIV/0!;1;#DIV/0!)
renvoyé directement à la fonction LOOKUP comme argument de vecteur de recherche.
Notez que le tableau ne contient que deux valeurs uniques: l'erreur de division par zéro (# DIV / 0!) Et le nombre 1.
LOOKUP recherche dans le tableau la valeur 2, ignorant les valeurs d'erreur. Ne trouvant pas 2, il revient au dernier 1, en position 7 dans le vecteur de recherche. LOOKUP renvoie alors le 7ème élément du vecteur résultat (la plage nommée "prix"), la valeur 15.
Pour en savoir plus sur le concept de recherche intentionnelle d'une valeur qui n'apparaîtra jamais, lisez à propos de BigNum.