具有INDIRECT / MATCH数组的外部工作簿VLOOKUP

好的,在我拔头发之前我需要一些帮助:P

我最终想要做的是find第二个vlookup值。 基本devise是1.用MATCH公式查找值行号2.然后使用INDIRECT公式将表格arrays从原始VLOOKUP

听起来很简单。 而且我已经在单个工作簿中完美地工作了,但是我的VLOOKUP需要在第二个工作簿中查找值。

在我的脑海中,下面的公式可以工作,但显然不是。

=VLOOKUP(A1,'[InsightsDataExport.xlsx]Lead Profile'!(INDIRECT("AP"&(((MATCH(A1,'[InsightsDataExport.xlsx]Lead Profile'!$AP:$AP,0))+1))):AR10000,2,FALSE) 

所以我的确是

  1. 看看Workbook 1 A1单元格
  2. 工作簿2中的表格数组(也称为InsightsDataExport)
  3. 间接配对列“AP”与行号。 使用MATCH公式find行号,在工作簿2中find第一次出现的A1值forms工作簿1 AP列然后加1(因此表数组从第一次出现开始)

我只是在这里转转。 如果有人可以直接指出我将不胜感激。

而不是试图解决你的公式,我宁愿给你一个更清洁的方法。

INDIRECT是一个function强大但易挥发的函数,将随工作簿中的每个更改一直重新计算。 如果您在整个专栏中使用它,则会极大地减慢您的工作簿。 你也被困在一个任意大的领域,它有自己的风险和性能问题。

您可以使用数组input的函数find值的第二个实例的行号。 双击一个单元格,使其处于编辑模式,粘贴此公式,然后使用CRTL-SHIFT-ENTER进行确认:

 =SMALL(IF('[InsightsDataExport.xlsx]Lead Profile'!$AP1:$AP10000=A1,ROW($A$1:$A$10000),FALSE),2) 

该公式的内部部分执行以下操作:

 '[InsightsDataExport.xlsx]Lead Profile'!$AP1:$AP10000=A1 

根据AP1:AP10000中的每个单元格是否与本地A1中的值匹配,创build一个TRUE和FALSE值的数组

 ROW($A$1:$A$10000) 

创build一个从1到10000的数字数组,如果单元格与A1匹配,则使用数组,否则使用FALSE。 因此,如果在单元格2和5中find要search的值,则公式的内部部分具有如下的数组:

{FALSE,2,FALSE,FALSE,5,FALSE ….}

然后,SMALL(array,2)表示取第二小的数值,即第二个匹配的行号,在这种情况下是5。

要以慢动作查看,请在小范围内进行testing,然后使用“公式”选项卡中的“评估function”工具。

现在您已经有了行号,您可以在实际search的列上使用INDEX:

 =INDEX('[InsightsDataExport.xlsx]Lead Profile'!$AR1:$AR10000,rownumber) 

但是,这仍然是在一个任意大的范围内运行,以确保它包含所有的价值。 有几个原因,这是不好的做法。 主要从不保证包含所有数据; 特别是如果行被删除,范围会不断缩小。

如果你使用表格,它会更整洁,更容易阅读。

如果您在表格中插入数据,则可以参考列名称。 然后函数将只search表中的行数。

在您的数据上,使用“插入”>“表”。 然后当你创build公式时,如果你select表中所有列的数据行,excel会自动插入列名。 所以,如果列AP有一个称为“ID”的标题,则用于标识具有第二个匹配ID的行的公式变为:

 =SMALL(IF(InsightsDataExport.xlsx!Table1[Id]=A1,ROW(InsightsDataExport.xlsx!Table1[Id]),FALSE),2) 

然后,您也可以在具有要返回的数据的列上使用INDEX。 请注意,如果只select不包含列标题的数据行,则第2行实际上是search索引的第一行,因此您需要从行号中减去1。 如果数据位于标题为“金额”的列中,则将使用以下公式:

 =INDEX(InsightsDataExport.xlsx!Table1[Amount],rownumber - 1)