使用vlookup公式的列参考

在Excel中插入表格时,可以参考:

  • 数据范围Table[#data]数据Table[#data]
  • 标题范围Table[#header]
  • 满栏范围Table[column name]
  • 某一列下的当前行的值Table[@[colum name]]

这使公式非常容易阅读: =COUNTIF(A:A,A1)变成

=COUNTIF(Suppliers[IBAN],Suppliers[@[IBAN]])

快速检查当前行值的重复项(IBAN)。

我现在试图将=VLOOKUP([@SupplierCode],Suppliers[Code],2,False)转换成

=VLOOKUP([@SupplierCode],Suppliers[Code],Suppliers[Name],False)

换句话说, 就是获得一个tableObject中的一列的列索引,以在公式中使用它(即,vlookup)

我大概可以写一个VBA函数来做到这一点,但我试图找出Excel是否有办法处理这个没有VBA代码

我不想要的VBA解决scheme (但如果不可能 ,可能会解决):

 Public Function GetColumnIndex(TableName As String, ColumName As String) As Long GetColumnIndex = ActiveSheet.ListObjects(TableName).ListColumns(ColumName).Index End Function 

允许我写: =VLOOKUP([@SupplierCode],Suppliers,GetColumnIndex("suppliers","Name"),FALSE)

作品,只要表格在同一张表上

现在添加为答案: =MATCH("Name",Suppliers[#Headers],0)给出了匹配名称的头的索引

我可以认为没有VBA的唯一方法就是使用Match()函数

=VLOOKUP([@SupplierCode],Suppliers,MATCH("Name",Suppliers[#Headers],0),FALSE)

我发现这个链接是无价的使用结构化引用与Excel表

我创build了一个有两列的供应商表,供应商代码和名称,然后在每个标题下面添加了几个条目。

当我粘贴你的=VLOOKUP(@SupplierCode,Suppliers[Code],2,False)

进入我桌子第一排右侧的单元格,我遇到了一个我从未见过的消息:

Excel警报

当closures时,公式的@Supplier部分被突出显示。 将其更改为Suppliers[@SupplierCode]解决了该问题。

假设SupplierCode位于表格的第一列中,您可以使用VLOOKUP函数中的MATCH函数find查找列,就像您已经发现的一样。

使用表格,我认为更好的select是用这种方式用INDEX公式代替VLOOKUP公式:

= INDEX(MyTableName [NameOfFieldContainingReturnValue],MATCH(LookupValue,MyTableName [NameOfFieldContainingLookupValue],0))

一些评论:

  • 索引函数可以用这种方式引用一个简单的列:= INDEX(MyTableName [FieldName]; 4)

  • 这将返回第4行的“FieldName”列中的值

  • 由于我们不知道行号,我们可以在包含查找值的列中使用MATCH(在使用vlookup公式的情况下,这是最左边的列)。