如何通过在excel中使用结构化引用来获取表列的索引?

时间:2008-12-12 21:11:33

标签: excel excel-2007 excel-formula

我有一个包含3列的表格。我想编写一个公式,给定结构化引用,返回列的索引。这将帮助我使用结构化参考编写VLookup公式。

因此,例如,对于列MyTableAB的表格C,我希望能够写一下:

=GetIndex(MyTable[C])

并让它返回3.

现在我只是确保表格范围从工作表的第一列开始,然后我写

=Column(MyTable[C])

但我想要一些更强大的东西。

6 个答案:

答案 0 :(得分:7)

基于您的示例的合适公式将是

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

forumla COLUMN(MyTable[C])的第一部分将返回引用列的列号。

公式 COLUMN(MyTable)的第二部分将始终返回表格第一列的列号。

答案 1 :(得分:4)

您提出的问题(或与之相关的问题)的另一个解决方案是使用类似=MATCH("C",MyTable[#Headers],0)的内容,它会在您发布的示例中返回3。

但是,如果您使用INDEX而不是VLOOKUP,则不需要执行此操作。例如,如果你想在行中找到C的值(假设不超过一个),其中A等于2,你可以使用类似=INDEX(MyTable[C],MATCH(2,MyTable[A],0))的公式,这很好地自我记录。

答案 2 :(得分:1)

你的意思是:

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

编辑重新评论

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

答案 3 :(得分:0)

=对詹姆斯回应的轻微修改: = COLUMN(表[*]) - MIN(COLUMN(MyTable))+ 1,其中*是您想要索引的列。

答案 4 :(得分:0)

你的最终目标是什么?您可能最好使用SUMIF(我描述here)或INDEX(我描述here)来访问您的值而不是跳回行/列...

答案 5 :(得分:0)

您可以使用:=COLUMN(MyTable[*]) - COLUMN(MyTable[A]) + 1,其中*是您想要其索引的列。