2008-12-12 10 views
4

J'ai une table avec 3 colonnes. Je veux écrire une formule qui, donnée une référence structurée, retourne l'index de la colonne. Cela m'aidera à écrire des formules VLookup en utilisant la référence structurée.Comment obtenir l'index de la colonne d'une table en utilisant une référence structurée dans Excel?

Ainsi, par exemple, pour la table MyTable avec des colonnes A, B, C Je voudrais pouvoir écrire:

=GetIndex(MyTable[C]) 

et avoir le retour 3.

En ce moment je assurez-vous que la plage de table commence sur la première colonne de la feuille et j'écris

mais je veux quelque chose a plus robuste.

Répondre

6

Une formule appropriée en fonction de votre exemple serait

=COLUMN(MyTable[C])-COLUMN(MyTable)+1 

La première partie de la forumla COLUMN(MyTable[C]) renverra le numéro de colonne de la colonne référencée.

La deuxième partie de la formule COLUMN (MyTable) renvoie toujours le numéro de colonne de la première colonne de la table.

+0

J'ai dû enlever l'image de votre poste parce que ImageShack l'a supprimé et l'a remplacé par la publicité. Voir http: //meta.stackexchange.com/q/263771/215468 pour plus d'informations. Si possible, ce serait génial pour vous de les télécharger à nouveau. Merci! – Undo

0

Vous pouvez utiliser: =COLUMN(MyTable[*]) - COLONNE (MyTable [A]) + 1, où * est la colonne dont vous souhaitez l'index.

+0

Existe-t-il un moyen d'obtenir la première colonne dans un tableau? Je ne préfère pas être enfermé en ayant toujours "A" au premier index. Merci –

1

Voulez-vous dire:

Dim r As Range 
MyLetter ="AA" 
Set r = Range(MyLetter & "1") 
MyIndex= r.Column 

Modifier re commentaire

Function GetRelativeColumn(Letter, RangeName) 
Dim r As Range 
Dim ColStart, ColRequired, ColTemp 
Set r = Range(RangeName) 

ColStart = r.Column 
ColRequired = Range(Letter & "1").Column 
ColTemp = ColRequired - ColStart + 1 
If ColTemp < 1 Or ColTemp > r.Columns.Count Then 
    MsgBox "Ooutside range" 
Else 
    GetRelativeColumn = ColTemp 
End If 
End Function 
+0

Je pense que cela fait 2 hypothèses. Fondamentalement, je voudrais un moyen de définir une table "MyTable" qui est toute gamme. Je veux alors pouvoir obtenir l'index d'une colonne nommée par rapport à la première colonne dans "MyTable" cette fonction peut-elle faire cela? Rappelez-vous que j'utilise des références structurées. De toute façon ty –

0

= légère modification aux respones de eJames: = COLONNE (MyTable [*]) - MIN (colonne (MyTable)) + 1, où * est la colonne dont vous voulez l'index.

0

Quel est votre objectif final? Vous pouvez mieux utiliser SUMIF (comme je décris here) ou INDEX (comme je décris here) pour accéder à vos valeurs plutôt que de revenir à la ligne/colonne ...

3

Une autre solution à la question que vous avez posée (ou quelque chose près de lui) est d'utiliser quelque chose comme =MATCH("C",MyTable[#Headers],0), ce qui renverra 3 dans l'exemple que vous avez posté. Cependant, si vous avez utilisé INDEX au lieu de RECHERCHEV, vous n'auriez pas besoin de le faire. Par exemple, si vous voulez trouver la valeur de C dans la ligne (en supposant qu'il n'y en a pas plus d'une) où A est égal à 2, vous pouvez utiliser une formule comme =INDEX(MyTable[C],MATCH(2,MyTable[A],0)), qui est bien auto-documentée.

+0

Même si je ne pense pas que l'OP voulait cette solution spécifiquement, c'est exactement ce que je cherchais. Je vous remercie. J'ai eu ce moment de claquement de front dès que j'ai vu "= MATCH (" – Bobby

Questions connexes