在 VLOOKUP 中使用表格和列标题

Using tables and column titles in VLOOKUP

我很难将我的 VLOOKUP 语句从简单地引用 sheet 和范围(就像一个魅力)转换为使用 table 和列名。

我正在尝试使 VLOOKUP 更健壮一些,因为它从中提取的 sheet 会不断更改数据,因此列号会经常更改。因此,我只想通过名称引用一个列。

  1. 我已将源数据 sheet 转换为 table。
  2. 我已适当命名所有列并仔细检查拼写。

这个 VLOOKUP 效果很好(目前):

=VLOOKUP(E6,'Costs'!$A:$AE,19,FALSE)

但是,我想做的是让它看起来像这样:

=VLOOKUP(E6,tblCosts[Order Number],tblCosts[June 2017], FALSE)

我一直在尝试使用 MATCH,但它也不起作用:

=VLOOKUP(E31,tblCosts[Order Number],MATCH(F4,tblCosts[June 2017],FALSE),FALSE)

更新

此公式现在有效,但它返回的是订单号...而不是当月的费用。

=VLOOKUP(E31,(tblCosts[Order Number]),(tblCosts[June 2017]),FALSE)

通常我会自己继续尝试...但我感到不知所措并且已经尝试了几个小时。任何建议都会很棒。

谢谢!!

这应该适合你:

=VLOOKUP(E31,tblCosts[#All],COLUMN(tblCosts[Jun-17]),false)

COLUMN(TblCosts[Jun-17]) returns 你想要的字段的列号。

VLookup搜索tblCosts[#All]的第一列-(table中的所有数据)中的数据(E31中)和returns列中的数据你想要的.

即使您向数据中添加列或行,此公式仍将继续有效。

确保电子表格中任何看起来像日期的标题(例如 "Jun-17")存储为文本而不是日期,因为当您使用 VLookup 时它不会匹配字符串 "Jun-17" .

=VLOOKUP(E37,tblCosts[#All],match("Jun-17", tblCosts[#Headers]),FALSE)

此匹配项正在查找所有列 headers 中的列名,并将 return 第一列右侧的列数而不是 [=19= 中的列号].当您的 table 不在 A 列开始时,这避免了必须使用 COLUMN(tblCosts[Jun-17]) - COLUMN(tblCosts[Order Number]) + 1

参考:https://www.excel-university.com/vlookup-hack-4-column-labels/