2017-06-28 2 views
0

J'ai une feuille de calcul avec un tas de tables. Les tables sont structurées, mais les titres (TABLE1, TABLE2) ne font pas partie de la table réelle. J'essaye de faire une fonction qui trouve quelle table correspond au titre et regarde alors COLUMN3 pour retourner la valeur SEVEN. Voici à quoi ils ressemblent. J'essaye de rendre cette fonction assez flexible de sorte que si je change la valeur à TABLE2, il renverra GG.Les recherches Excel fonctionnent pour trouver une table et une colonne structurées

TABLE1 +---------+---------+---------+----------+ | column1 | column2 | COLUMN3 | column4 | +---------+---------+---------+----------+ | row1 | xxx | xxx | xxx | | row2 | xxx | SEVEN | xxx | | row3 | xxx | xxx | xxx | | row4 | xxx | xxx | xxx | +---------+---------+---------+----------+

TABLE2 +---------+---------+---------+----------+ | column1 | column2 | COLUMN3 | column4 | +---------+---------+---------+----------+ | row1 | bb | cc | dd | | row2 | ff | GG | hh | | row3 | zzz | zzz | zzz | | row4 | zzz | zzz | zzz | +---------+---------+---------+----------+

Je ne sais pas où commencer. Ma connaissance de VBA est inexistante, donc j'essaye juste de comprendre ceci avec juste une fonction imbriquée superbe (bien que tous les conseils/solutions soient bienvenus). Des idées? Merci d'avance!

Répondre

1

Vous pouvez utiliser le nom de la table (si vous utilisez des objets de table) ou des noms de plage avec une fonction indirecte. Considérons la capture d'écran ci-dessous.

Les tables sont appelées TableBlue et TableYellow et ont été créées avec Insertion> Tableau. Les références structurées peuvent être utilisées pour faire référence à des éléments de la table, par exemple TableBlue fait référence à toutes les lignes de la table bleue, TableYellow[#Headers] à la ligne d'en-tête de la table jaune.

Ce texte peut être branché sur une fonction Indirect(), qui pointera alors sur la plage correspondante. La formule dans E11 met ses composants ensemble avec Indirect et utilise le texte dans les cellules à gauche. Voyez comment, quand il est copié, il regarde dans une table différente, et peut même renvoyer une valeur d'une colonne différente.

=VLOOKUP(C11,INDIRECT(B11),MATCH(D11,INDIRECT(B11&"[#Headers]"),0),FALSE) 

Ce type de construction indirecte() peut être utilisé dans d'autres formules, pas seulement un Vlookup, bien sûr. Cela dépend de ce que vous voulez réaliser. Sachez cependant qu'indirect est volatile et peut ralentir les choses, en particulier dans un grand classeur.

enter image description here

+0

Merci pour votre réponse! Oui, j'utilise des objets de table et je pense que Indirect() est certainement quelque chose que je vais examiner pour m'intégrer dans mes Matchs d'Index. J'ai une question sur votre exemple: Que recommanderiez-vous de faire si les noms de table ne sont pas 1-à-1 avec mes noms de table spécifiés? par exemple. mon titre est _ "Table Blue Y" _ et mon nom de table est _TableBlue_ – Neerav

+0

Quel titre? Où un titre entre-t-il? – teylyn

+0

Par 'titre' je veux dire la cellule qui dit 'TableBlue' et' TableYellow' – Neerav