使用IndexMatch或Vlookup在不同工作簿中引用表格仅在WB打开时起作用

Excel 2013 64bit,赢7

目标=使用带有索引匹配的公式中的已closures工作簿的表名引用(如果需要,可以使用vLookup解决方法)。

看起来很简单,但是在closures引用的Tables工作簿之后重新计算时,这些工作都不起作用。 这一个应该工作,我尝试了很多其他的东西,但没有成功。 (编辑:我的理解是这是不可能的,在一个封闭的工作簿中引用表?要继续到底部的解决scheme)

仅在工作簿打开时才有效,closures时显示#REF! =INDEX('C:\Vendors.xlsm'!VendName[[#All],[Qty]],MATCH(A1,'C:\Vendors.xlsm'!VendName[[#All],[SKU]],0))

与vlookup,同样的事情,它只适用于打开工作簿。

 =VLOOKUP(A1,'C:\Vendors.xlsm'!VendName[#All],3,0) 

但是,如果我使用命名的范围,而不是表,它将工作!

 =VLOOKUP(A1,'C:\Vendors.xlsm'!VendName,3,0) 

那么为什么不使用名称范围与索引匹配? 我无法弄清楚如何告诉索引匹配使用命名范围的特定列,如我做一个表。 即按照[[#All],[SKU]]的表名称。 另外我觉得很难相信你不能在一个封闭的工作簿中引用一个表格,我一定错过了正确的解决scheme。

我在第一个公式中做了什么错误,所以当表WBclosures时它不起作用? 我怎么会使用一个命名的范围,但告诉它引用索引匹配公式中的命名范围的第三行?

更新:我相信我需要沟外表,并使用外部正规NameRanges只,但我怎么参考名称范围/第二列。

 =INDEX(ExcelFile.xlsx!NamedRange,MATCH(F4,ExcelFile.xlsx!NamedRange,0)) 

在这个例子中,命名范围是5列宽,我怎么告诉它匹配的第一行和引用第三。 Ie = INDEX(ExcelFile.xlsx!NamedRange,Row(2)或其他…

我不知道如何告诉索引匹配使用命名范围的特定列。 在下面:名称范围是指A列:D。 硬编码匹配来自第3列的数据在那里是完全没问题的。 这个公式失败的原因是NameRange的第二次使用。 该公式需要引用列B(范围NameRange的第二列)。 我如何强制? 像NameRange [Column2](我制定了expression目标的格式)。

= INDEX(NameRange,MATCH(H10,NameRange,0),3)

你可以执行一个索引(data_table,match1,match2),它通过比较search词和参考列来拉取match1,并通过比较search词和参考行来拉取match2。

即:假设数据表工作簿上的参考列是A:A。 假设您的参考行(对于标题)是1:1。

设置3个命名范围:

(1)A1:Z100 =“FullData”,将全部数据表格显示为2D范围。 (2)答:A =“ItemIndex”只显示参考列。 (3)1:1 =“HeaderIndex”只显示引用行。

在结果工作簿中引用这个公式的公式是:

 =INDEX('C:\Vendors.xlsm'!FullData,MATCH($A1,'C:\Vendors.xlsm'!ItemIndex,0),MATCH("HEADER NAME TO MATCH",'C:\Vendors.xlsm'!HeaderIndex,0)) 

使用这个参考封闭的书可能会有一些更广泛的问题,但是我对这个一般过程并不是很熟悉,所以有人可能会有一个更好的方法让你做这个整体。 这回答你最初的问题,至less用你的方法来做。

编辑

由于你有20多个表,并且标题总是以相同的顺序,你可以简单地使用你的vlookup,就像这样; 将阻止您需要为每个选项卡声明3个名称范围; 相反,您只需要为每个选项卡创build一个命名范围,如下所示:

 =vlookup(A1,'C:\Vendors.xlsm'!FullData,5) 

这硬编码拉第五列,如你所说,表头是相同的,从表到不变。 为了让它从你想要的标题中拉出来,在你的结果标签中创build一个search索引行(让我们假设表2中的行1,单元格B1上的标题的search项):

  =vlookup(A1,'C:\Vendors.xlsm'!FullData,MATCH(B1,Sheet2!1:1,0)) 

我总结如下:

  1. 无法在已closures的工作簿中为“索引匹配”和“vLookup”引用表。 使用简单的名称范围。

  2. 以下是如何使用包含多列的NameRanges进行索引匹配。 = INDEX(NameRange,MATCH(H10,INDEX(NameRange,0,1),0),3)

第一个NameRange的返回值列的具体解决scheme是添加结束,3)因此返回第三列中的值。

解决方法是匹配的查找列是不是只是把MATCH(A1,NameRange,使用MATCH(A1,INDEX(NameRange,0,1),…这告诉它使用第一列命名范围。

此解决scheme允许您为标准表格布局编写一个公式,只需更改每个范围的名称并应用于整个表格。 然后我可以在Indirect中使用它,这样整个表格中的公式就可以引用顶部的帮助单元,所以在添加更多的供应商时,它永远不需要改变。