RECHERCHE Excel par deuxième colonne en utilisant le nom de la table comme plage

11

En utilisant l'exemple de tableau ci-dessous, je peux utiliser la formule =VLOOKUP("ABC123456",Table1,3,FALSE)pour rechercher la Demandvaleur, mais je veux pouvoir effectuer la recherche en utilisant le Cust Partchamp sans avoir à faire du Cust Partchamp la première colonne du tableau. Faire Cust Partla première colonne n'est pas une solution acceptable, car je dois également effectuer des recherches en utilisant le Partchamp, et je ne veux pas utiliser de plages codées en dur (par exemple $B$2:$C$4) principalement par question, mais aussi parce que l'utilisation de la table et du champ les noms facilitent la lecture de la formule. Y a-t-il un moyen de faire ça?

entrez la description de l'image ici

Drew Chapin
la source

Réponses:

14

Il est possible d'utiliser OFFSETpour renvoyer la plage Table1 mais une colonne au-dessus, par exemple

=VLOOKUP("AZ12345",OFFSET(Table1,0,1),2,FALSE)

Cela va rechercher AZ12345 dans la colonne CustPart et retourner la valeur de la colonne suivante

barry houdini
la source
Quel paramètre doit être ici si une valeur de colonne de pièce est nécessaire ici?
zygimantus
10

Vous pouvez combiner INDEXet obtenir MATCHle même résultat VLOOKUPsans que la comparaison soit limitée à la première colonne. Bien qu'il soit légèrement plus complexe.

=INDEX(Table1[Demand],MATCH("AZ12345",Table1[Cust Part],0))

Fondamentalement, vous utilisez MATCHpour trouver le numéro de ligne et INDEXobtenir la valeur.

Remarque: Contrairement VLOOKUP, si le résultat est une cellule vide, INDEXretournera 0au lieu d'une chaîne vide.

Drew Chapin
la source
1
"Contrairement VLOOKUP"? Il se comporte exactement de la même manière lorsque les cellules vides sont converties en 0.
underscore_d
1
Ceci est le premier exemple que j'ai vu avec l' INDEX MATCHutilisation d'une table. Cela améliore considérablement la lisibilité de la formule. J'essayais d'éviter, OFFSETcar il s'agit d'une fonction Excel volatile et peut entraîner un traitement supplémentaire.
Ben
2

Que diriez-vous de quelque chose comme:

=VLOOKUP("ABC123456";Table1[[Cust Part]:[Demand]];COLUMNS(Table1[[Cust Part]:[Demand]]);FALSE) 

Je préfère cela pour que vous puissiez voir ce que vous faites, même dans des tables plus complexes, et si la structure de la table change, la formule fonctionnera toujours, tant que la colonne Cust Part est devant la colonne Demand.

Peter
la source