在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))
。
B3为Workbook.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.xlsx和Sheet1在它肯定存在,我能够不使用INDIRECT
从他们的数据。
为什么不起作用?
这里使用的INDEX
和MATCH
函数可以处理封闭的工作簿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以匹配其他的]