在INDEX函数中INDIRECT给#REF错误

我有一个Excel工作簿Spreadsheet.xlsx其中B2 =MATCH(B1,'\\SERVER\Path\To\File\[Workbook.xlsx]Sheet1'!$A$1:$A$500,0)采取string(名称),并将其与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))

B3Workbook.xlsx中的Sheet1中的B2索引与$A$8:$SD$8对应的值的范围,并返回与$A$2:$SD$2范围内的date$A4相匹配的值。

目前我手动input的行号为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.xlsxSheet1在它肯定存在,我能够不使用INDIRECT从他们的数据。

为什么不起作用?

这里使用的INDEXMATCH函数可以处理封闭的工作簿INDIRECT 不会

…但是在这里你不需要使用INDIRECT ,你可以使用这个版本来定义第一个范围内的行号

=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))

即使源代码工作簿已经closures,这也应该起作用,而且在任何情况下都是“更干净”,更稳健的方法。

请注意,公式中的第一个范围将更改为与B2的匹配范围一样长

如果你想要的话,你可以完全删除B2,只要把B2中的MATCH函数replace成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))

[注意:正如杰里提到的,你的表名不一致,所以我把第一个改成了Sheet1以匹配其他的]