INDEX函数中的INDIRECT给出了#REF错误

时间:2013-12-30 18:46:18

标签: excel ms-office excel-formula excel-2010 excel-indirect

我有一个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的情况下从中获取数据。

为什么它不起作用?

1 个答案:

答案 0 :(得分:4)

此处使用的

INDEXMATCH函数执行适用于已关闭的工作簿 - 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 以匹配其他人]