繁体   English   中英

使用vlookup公式的列引用

[英]Using a column reference for a vlookup formula

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

  • 数据范围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解决方案 (但如果不可能 ,可能会解决):

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表格

我创建了一个包含2列的小供应商表,SupplierCode和Name,然后在每个标题下面添加了几个条目。

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

进入我桌子第一排右侧的一个牢房,我遇到了一条我从未见过的信息:

Excel提醒

当关闭时,公式的@Supplier部分会突出显示。 将其更改为Suppliers[@SupplierCode]修复了该问题。

假设SupplierCode位于表的第一列,您可以使用您已发现的VLOOKUP函数中的MATCH函数找到查找列。

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

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

一些评论:

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

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

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

答案可以推广到查找值不在第一列中的情况:

=VLOOKUP("g";Table[[LookupColumn]:[ValueColumn]];MATCH("ValueColumn";Table[[#Headers];[LookupColumn]:[ValueColumn]];0);FALSE)

如下例所示:

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM