我继承了这个数据结构。我有一堆产品及其供应商信息,布局如下:
Supplier Order Number Name Cost
ACME 00123 A 1
ACME 00321 B 2
ACME 20798 C 3
ACME 11010 D 4
ACME 32333 E 5
ACME 20001 F 6
Babar 20001 G 7
Babar 54687 H 8
Babar 69441 I 9
Babar 65777 J 10
我将从其他工作表中引用这些数据。显然,如果不区分供应商,仅使用订单号的 vlookup 是不可靠的。
我的第一个解决方案在本地有效,但我无法让它在工作簿之间工作。我使用 INDIRECT、MATCH 和 COUNTIF 在上述工作表中设置了一个命名范围,这样范围就会随着新项目的添加而扩大。
在这个例子中,我有Range_ACME定义为:
=INDIRECT("B"&MATCH(Sheet1!$A$2,Sheet1!$A:$A,0)&":D"&(MATCH(Sheet1!$A$2,Sheet1!$A:$A,0)+COUNTIF(Sheet1!$A:$A,Sheet1!$A$2)-1))
(实际上,我使用另一个命名单元格作为 MATCH 查找值,但为了测试目的我对其进行了简化。)这样我就可以像这样找到 ACME 商品 00123 的成本:
=VLOOKUP("00123",Range_ACME,2,false)
当尝试在另一个工作簿中使用这些范围时,我收到一个错误,提示范围无效。如果我使用一个更简单的命名范围,没有所有的 INDIRECT 通配符,那么它就可以正常工作。在这里,Range_ACME_Simple只是
=工作表 1!$B$2:$D$7
我理解这需要我同时打开工作簿。还有其他方法可以定义动态范围吗,还是我应该将供应商名称与订单号连接起来?
答案1
为了简单地解决这个问题并演示所需的操作,我重新创建了您提供的工作表,并在数据集工作簿中创建了命名范围ACME.xlsx与其数据列标题相关
- 供应商
=Sheet1!$A:$A
- 命令
=Sheet1!$B:$B
- 姓名
=Sheet1!$C:$C
- 成本
=Sheet1!$D:$D
然后在另一个工作簿中,我为您想要查找的值创建了入口点(供应商和订单号)。您想要退回的商品名称位于下一个入口点
B3
在正在创建的工作簿的单元格中,我输入
=INDEX('C:\ACME.xlsx'!Name,MATCH(B1&B2,'C:\ACME.xlsx'!Supplier&'C:\ACME.xlsx'!Order,0))
并按下CTRL++SHIFTENTER
这给了我们想要的结果。现在,如果你将单元格更改B1
为 ACME,项目名称将自动更改为 F,并且如果公式中有完整的文件路径,则不需要打开包含数据结构的工作簿。