创建动态公式,以便一个Excel表在另一个表中查找相同的列名


1

我有两个Excel表,表A和表B.表A包含列Customer ID,Postcode,Customer Name和其他几个列名与表B中列相同的列。我想创建一个公式,理想情况下使用结构化引用这样表B中列的顺序是无关紧要的,它查找表B中与表I中我所在行的客户ID匹配的值以及我所在列的列值。

例如,如果我的公式在表A的第三列和客户ID为“123”的行中,我希望它检查自己的列名(客户名称)并查找客户ID的值,其中客户ID =表B中的“123”。

以下公式适用于“客户名称”列:

=INDEX(TableB[Customer Name], MATCH([@[Customer Number]], TableB[Customer Number], 0))

但我希望能够创建一个单独的公式,用我所在列的名称动态替换[Customer Name]部分,以便我可以将其复制到所有列中。我尝试使用#Headers创建引用并使用间接但我得到一个Ref错误:

=INDIRECT("INDEX(TableB["&[#Headers]&"], MATCH([@[Customer Number]], TableB[Customer Number], 0))")

Answers:


0

INDEX MATCH 是正确的方法,你只需要小心你的结构。

表A在左边。表B在右边。我们将使用[客户编号]查找[邮政编码]。

这是写入的公式D2

=INDEX(TableB,MATCH([@[Customer Number]],TableB[Customer Number],0),MATCH(D$1,TableB[#Headers],0))

在此输入图像描述

INDEX如您所知,返回行和列交叉处的单元格值。MATCH返回数组中值的相对位置。

所以对于两个输入来说INDEX,首先我们在源表中找到与我们正在使用的查找值(客户编号)匹配的行号(这是传统的前半部分INDEX MATCH),通过提供MATCH垂直数组来查看,然后我们通过提供MATCH包含源列标题行的水平数组来找到与我们所在列的名称匹配的列号。

您将注意到,如果向源表添加字段,并更改公式表中的标题,则无需更改公式即可获得新结果。

在此输入图像描述

..并且这个公式既可以复制也可以复制。

在此输入图像描述

这里的两个关键是:

  • 知道MATCH将同时计数和向下计数。
  • 手动将Excel提供给您的结构化引用更改为实际的R1C1样式单元格引用,这样您可以使该单元格引用的列索引动态而不是固定(即C $ 1而不是TableA[[#Headers],[Post Code]]硬盘编码的值)您所在的字段,因此不会复制,但如果您手动更改其中包含查找公式的列的名称,它将起作用,并且您只需要在目标表中有一个查找字段) 。

NB我知道这个问题已经超过三年了,但这是一个很好的问题,并且很好地展示了该INDEX MATCH技术的多功能性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.