web-dev-qa-db-fra.com

Excel - Trouver une valeur dans un tableau et renvoyer le contenu de la colonne correspondante

J'essaie de trouver une valeur dans un tableau, puis de la renvoyer dans une ligne spécifique de la colonne correspondante.

Dans l'exemple ci-dessous, j'ai besoin de savoir dans quelle baie se trouve la Chevrolet:

    Column A        Column C    Column D    Column E
    Chevrolet       Bay 1       Bay 2       Bay 3
                    Toyota      Ford        Saturn
                    Honda       Chevrolet   Jaguar
                    Ferrari     Subaru      Lexus
                    Mitsubishi  Hundai      BMW

Je cherche Chevrolet dans le tableau C2: E5. Une fois qu'il a déterminé que la Chevrolet est dans la colonne D, je dois lui renvoyer la valeur dans D1. Si c'était dans la colonne E, j'en ai besoin pour renvoyer la valeur dans E1.

Toute aide serait grandement appréciée. Merci d'avance.

4
Beckie

Essayez ceci Array Formula :

=INDEX($C$1:$E$5,1,SMALL(IF(NOT(ISERROR(SEARCH(A1,$C$1:$E$5))),COLUMN($A:$C),99^99),1))

ou si vous êtes sûr que chaque colonne contient exactement ce qui est recherché, vous pouvez l'écrire comme ceci:

=INDEX($C$1:$E$5,1,SMALL(IF($C$1:$E$5=A1,COLUMN($A:$C),99^99),1))

Entrez la formule dans n’importe quelle cellule en appuyant sur Ctrl+Shitf+Enter.

Comment ça marche?
Notre but ultime est de trouver la colonne qui contient la correspondance:

  • Nous avons d'abord effectué la recherche de correspondance en utilisant la formule suivante: SEARCH(A1,$C$1:$E$5). Il vérifie simplement si l'une des entrées correspond A1 . En fait, cela peut être simplifié à $C$1:$E$5=A1 mais je ne suis pas sûr que toutes les entrées de chaque colonne correspondent exactement à ce qui est dedans A1 .
  • Cette formule produira un tableau de valeurs lorsqu’elle sera entrée sous la forme d’une formule matricielle . Quelque chose comme: {SEARCH(A1,C1), SEARCH(A1,D1), SEARCH(A1,E1);... SEARCH(A1,E5)}. Le résultat sera un tableau de nombre (s) et d'erreur (si non a été trouvé). Mais nous ne voulons pas cela, sinon nous retournerons une erreur à chaque fois.
  • Nous utilisons ensuite IF(NOT(ISERROR(SEARCH(A1,$C$1:$E$5))),COLUMN($A:$C),99^99). Cette formule renvoie le numéro de colonne s'il existe une correspondance et un nombre relativement important 99^99 sinon. Le résultat serait: {99^99, 99^99, 99^99, 2, ..., 99^99}.
  • Et nous sommes proches de ce dont nous avons besoin, car nous avons déjà un tableau de colonnes et un nombre énorme . Nous utilisons simplement SMALL pour renvoyer le plus petit nombre qui, à mon avis, est le plus bas numéro de colonne où une correspondance a été trouvée. Donc, SMALL(IF(NOT(ISERROR(SEARCH(A1,$C$1:$E$5))),COLUMN($A:$C),99^99),1) renverrait 2. Quelle est la colonne dans laquelle Chevrolet est référencé à $ C $ 1: $ E $ 1 .
  • Comme nous avons déjà le numéro de colonne, nous utilisons simplement la fonction INDEX qui est: INDEX($C$1:$E$5,1,2).

Remarque:99^99 peut être un nombre relativement grand. Pas nécessairement 99^99. Vous pouvez utiliser la valeur réelle 16385 (le nombre maximal de colonnes dans Excel 2007 et les niveaux supérieurs à +1).

Résultat: enter image description here

5
L42

Cette formule le fera en supposant que la valeur de recherche est en A1:

="Bay "&SUMPRODUCT((B2:D5=A1)*(COLUMN(B2:D5)))-1

Vous pouvez facilement l'ajuster pour ajouter plus de lignes et de colonnes. 

La formule renvoie le numéro de colonne contenant la valeur de recherche et le concatène avec la baie de Word pour renvoyer le résultat exact souhaité.

La valeur -1 à la fin corrige le fait que la colonne Baie 2 est en réalité la troisième colonne de la feuille de calcul. Vous devrez donc peut-être également ajuster ce décalage.

La fonction SOMMEPROD est beaucoup sous-évaluée. Plus sur ici:

http://fiveminutelessons.com/learn-Microsoft-Excel/multiply-two-columns-and-add-results-using-sumproduct

0
millionleaves

La formule SUMPRODUCT ci-dessus est parfaite pour ce que je veux.

Par exemple. rechercher l'emplacement - COLUMN et ROW - d'une valeur donnée à A1 dans une plage 2D A2:J44

use:  =SUMPRODUCT((A2:J44=A!)*(COLUMN(A2:J44)))  gives the Absolute* COL#
and : =SUMPRODUCT((A2:J44=A1)*(ROW(A2:J44))) gives the Absolute* ROW#

(pas où il est dans la gamme)

Ceux-ci peuvent ensuite être utilisés dans, par exemple. INDEX() ou CELL() etc fonctions.

0
chris rogers

Une autre réponse rapide et fictive consiste à placer une ligne «fictive» au-dessus de l'ensemble de données, puis à déterminer quelle colonne d'espace réservé a renvoyé le résultat correct.

En B1, vous pouvez mettre l'équation

=MATCH($A$2,B3:B6,0)

Et puis en C1, vous pouvez mettre

=MATCH($A$2,C3:C6,0)

Et ainsi de suite jusqu'à ce que vous ayez couvert toutes les lignes et toutes les colonnes. Modifiez les paramètres B3: B6 et C3: C6 pour refléter les lignes de données réelles dans la colonne donnée.

Maintenant, la formule de tableau amusant qui va effectivement renvoyer la baie. J'ai cette formule matricielle dans la cellule A1 et elle est à la recherche à partir de B1: D1, mais vous pouvez déplacer la cellule A1 n'importe où et la plage B1: D1 doit être composée de toutes les colonnes factices que vous avez créées ci-dessus. En outre, cela suppose que les baies souhaitées figurent dans la ligne 2 (si elles se trouvent dans une autre ligne, modifiez R2C en R # C où # est le numéro de la ligne). Pour entrer correctement, entrez la formule et puis appuyez sur CTRL + MAJ + ENTRÉE

=INDIRECT("R2C"&SUM(IF(ISERROR(B1:D1),FALSE,B1:D1))+1,FALSE)

Si la formule est correctement saisie, des accolades {} entourent l’équation lorsque vous cliquez une fois sur la cellule.

0
Michael