Excel 2013 64bit,win 7
目标=使用索引匹配的公式中的已关闭工作簿中的表名引用(如果需要,还可以使用vLookup)。
看起来很简单,但在关闭引用的Tables工作簿后重新计算时,这些都不起作用。这个应该工作,我尝试了很多其他的东西,但没有成功。 (编辑:我的理解是,这是不可能在封闭的工作簿中引用一个表?转到底部解决方案)
仅在工作簿打开时有效,关闭时显示#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]]跟随表名。此外,我发现很难相信你无法在封闭的工作簿中引用表格,我必须错过正确的解决方案。
我在第一个公式中做错了什么,以便在关闭表WB时它不起作用?我如何使用命名范围但是告诉它引用索引匹配公式中命名范围的第3行?
更新:我相信我需要抛弃外部表并仅使用外部常规NameRanges,但如何引用名称范围/第2列。
=INDEX(ExcelFile.xlsx!NamedRange,MATCH(F4,ExcelFile.xlsx!NamedRange,0))
在此示例中,命名范围是5列宽,如何告诉它与第1行匹配并引用第3行。即= INDEX(ExcelFile.xlsx!NamedRange,Row(2)或其他......
我无法弄清楚如何告诉索引匹配使用命名范围的特定列。在下面:名称范围是指A列:D。用于匹配第3列数据的硬编码完全没问题。这个公式失败的原因是NameRange的第二次使用。该公式需要引用B列(NameRange范围的第2列)。我该怎么强迫呢?比如NameRange [Column2](我编写了表达目标的格式)。
= INDEX(NameRange,MATCH(H10,NameRange,0); 3)
答案 0 :(得分:0)
您可以执行索引(data_table,match1,match2),它通过将搜索词与参考列进行比较来提取match1,并通过将搜索词与参考行进行比较来提取match2。
ie:假设数据表工作簿上的引用列是A:A。假设您的引用行(对于标题)是1:1。
设置3个命名范围:
(1)A1:Z100 =“FullData”,将完整数据表显示为2D范围。 (2)A: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))
使用它来引用一本封闭的书可能会有一些更广泛的问题,但是我对这个一般过程并不是很熟悉,所以有人可能会想出更好的方法让你做到这一点。这至少可以回答你的初始问题。
编辑
由于你有20多个表,并且标题总是以相同的顺序排列,你可以像你这样建议使用你的vlookup;将阻止您为每个选项卡声明3个名称范围;相反,您只需要为每个标签创建一个命名范围,如下所示:
=vlookup(A1,'C:\Vendors.xlsm'!FullData,5)
这个硬编码用于拉入第5列,因为您说从表到表的标题是相同的,并且不会更改。要改为从您想要的标题中提取,请在结果标签中创建一个搜索索引行(让我们假设第2页上的第1行,以及单元格B1上标题的搜索词):
=vlookup(A1,'C:\Vendors.xlsm'!FullData,MATCH(B1,Sheet2!1:1,0))
答案 1 :(得分:0)
I concluded the following:
Cannot reference tables in closed workbooks for Index Match and vLookup. Use simple Name Ranges.
Here is how to use Index Match with NameRanges that contain multiple columns. =INDEX(NameRange,MATCH(H10,INDEX(NameRange,0,1),0),3)
The solution to being specific about a return value column for the first NameRange is to add that ending ,3) thus returning the value in the 3rd column.
The solution to being specific about the lookup column to match is instead of just putting the MATCH(A1,NameRange,. use MATCH(A1,INDEX(NameRange,0,1),... This tells it to use the first column in that Named Range.
This solutions allows you to write one formula for a standard table layout, and simply change the Name for each range and apply across. I then was able to use this with Indirect so that the formula throughout the sheet can reference a helper cell on top so it never has to be changed when adding more vendors.