我有一个有 3 列的表。我想编写一个公式,给定结构化引用,返回列的索引。这将帮助我使用结构化参考编写 VLookup 公式。
因此,例如,对于带有 columns 的表,MyTable
我A
希望能够编写:B
C
=GetIndex(MyTable[C])
并让它返回 3。
现在我只是确保表格范围从工作表的第一列开始,然后我写
=Column(MyTable[C])
但我想要更强大的东西。
我有一个有 3 列的表。我想编写一个公式,给定结构化引用,返回列的索引。这将帮助我使用结构化参考编写 VLookup 公式。
因此,例如,对于带有 columns 的表,MyTable
我A
希望能够编写:B
C
=GetIndex(MyTable[C])
并让它返回 3。
现在我只是确保表格范围从工作表的第一列开始,然后我写
=Column(MyTable[C])
但我想要更强大的东西。
基于您的示例的合适公式是
=COLUMN(MyTable[C])-COLUMN(MyTable)+1
论坛的第一部分COLUMN(MyTable[C])
将返回引用列的列号。
公式COLUMN(MyTable)的第二部分将始终返回表格第一列的列号。
您提出的问题(或接近它的问题)的另一个解决方案是使用类似的东西=MATCH("C",MyTable[#Headers],0)
,这将在您发布的示例中返回 3。
但是,如果您使用 INDEX 而不是 VLOOKUP,则不需要这样做。例如,如果您想在 A 等于 2 的行中找到 C 的值(假设不超过一个),您可以使用类似 的公式=INDEX(MyTable[C],MATCH(2,MyTable[A],0))
,它可以很好地自我记录。
你的意思是:
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,其中 * 是您想要索引的列。