1

我有一个 Excel 工作簿Spreadsheet.xlsx,其中B2在B1=MATCH(B1,'\\SERVER\Path\To\File\[Workbook.xlsx]Sheet1'!$A$1:$A$500,0)中获取字符串(名称)并将其与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.xlsxSheet1B2$A$8:$SD$8中的行号相对应的一系列值,并返回与该范围内的日期匹配的值。$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.xlsxSheet1肯定存在,我可以在不使用INDIRECT.

为什么它不起作用?

4

1 回答 1

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以匹配其他工作表]

于 2013-12-30T20:10:33.967 回答