我有一个excel工作簿 Spreadsheet.xlsx ,其中 B2 =MATCH(B1,'\\SERVER\Path\To\File\[Workbook.xlsx]Sheet1'!$A$1:$A$500,0)
获取 B1中的字符串(名称) 并将其与 Workbook.xlsx 中的一行行标题相匹配,以提供行号。
目前 B2 会返回 8 的值,该值在 B3 =INDEX('\\SERVER\Path\To\File\[Workbook.xlsx]Sheet1'!$A$8:$SD$8), MATCH($A4,'\\SERVER\Path\To\File\[Workbook.xlsx]Sheet1'!$A$2:$SD$2,0))
中使用。
B3 对与工作簿中 Sheet1 中 B2 的行号对应的值$A$8:$SD$8
进行索引。 xlsx ,并返回与$A4
范围内的日期$A$2:$SD$2
匹配的值。
目前我手动输入行号为 B3 范围`$ A $ 8:$ SD $ 8。
如果我尝试使用 B3 =INDEX(INDIRECT("'\\SERVER\Path\To\File\[Workbook.xlsx]Sheet'!$A$"&B2&":$SD$"&B2), MATCH($A4,'\\SERVER\Path\To\File\[Workbook.xlsx]Sheet1'!$A$2:$SD$2,0))
自动执行此操作,则会出现#REF
错误。
我曾在其他地方使用INDIRECT
,例如=MAX(INDIRECT(K&"K1"))
它运作得很好。
此外, Workbook.xlsx 和 Sheet1 肯定存在,我可以在不使用INDIRECT
的情况下从中获取数据。
为什么它不起作用?
答案 0 :(得分:4)
INDEX
和MATCH
函数执行适用于已关闭的工作簿 - INDIRECT
不
...但您在这里并不需要INDIRECT
- 您可以使用此版本B2
来定义第一个范围内的行号
=INDEX('\\SERVER\Path\To\File\[Workbook.xlsx]Sheet1'!$A$1:$SD$500),B2, MATCH($A4,'\\SERVER\Path\To\File\[Workbook.xlsx]Sheet1'!$A$2:$SD$2,0))
即使源工作簿已关闭,这应该可以工作,并且在任何情况下都是一种“更清晰”,更强大的方法。
请注意,公式中的第一个范围会更改为与B2
的匹配范围如果你想要你可以完全删除B2,只需将B2中的MATCH函数放在B2的公式就位中,即
=INDEX('\\SERVER\Path\To\File\[Workbook.xlsx]Sheet1'!$A$1:$SD$500),MATCH(B1,'\\SERVER\Path\To\File\[Workbook.xlsx]Sheet1'!$A$1:$A$500,0), MATCH($A4,'\\SERVER\Path\To\File\[Workbook.xlsx]Sheet1'!$A$2:$SD$2,0))
[注意:正如Jerry所说,你的工作表名称不一致,所以我把第一个改为 Sheet1 以匹配其他人]