如何通过在Excel中使用结构化引用来获取表列的索引?
我有一个3列的表。 我想写一个公式,给定一个结构化的参考,返回列的索引。 这将帮助我使用结构化的参考书写VLookup公式。
所以,例如,对于列A
, B
, C
MyTable
表,我希望能够写:
=GetIndex(MyTable[C])
并返回3。
现在我只是确保表格的范围从表格的第一列开始写入
=Column(MyTable[C])
但我想要更强大的东西。
基于你的例子一个合适的公式是
=COLUMN(MyTable[C])-COLUMN(MyTable)+1
forumla COLUMN(MyTable[C])
的第一部分将返回被引用列的列号。
公式COLUMN(MyTable)的第二部分将始终返回表的第一列的列号。
你提出的问题的另一个解决scheme是使用类似=MATCH("C",MyTable[#Headers],0)
,在你发布的例子中返回3。
但是,如果您使用INDEX而不是VLOOKUP,则不需要执行此操作。 例如,如果您想要在行中findC的值(假设不超过一个),您可以使用一个公式,例如=INDEX(MyTable[C],MATCH(2,MyTable[A],0))
,这是很好的自我logging。
你的意思是:
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
您可以使用: =COLUMN(MyTable[
*
]) - COLUMN(MyTable[A]) + 1 ,其中*
是您想要索引的列。
对eJames的响应进行轻微修改:= COLUMN(MyTable [*]) – MIN(COLUMN(MyTable))+ 1,其中*是您想索引的列。
你最终的目标是什么? 你可能会更好使用SUMIF(正如我在这里描述的)或INDEX(如我在这里描述的)来访问你的值,而不是跳回到行/列…