将INDIRECT替换为INDEX以迭代已关闭的工作簿

时间:2015-03-11 11:26:18

标签: excel excel-formula

昨天我开始讨论将一些工作簿中的单元格迭代到一个新的摘要工作簿中。为此,我使用了INDIRECT函数:

Iterate between workbooks using INDIRECT

然而,实现INDIRECT的后退我希望实现相同的目标,但是通过使用INDEX,因为我从论坛中读到,即使引用的工作簿被关闭,INDEX也能工作,而间接则没有。

然后,使用

 =INDEX(CONCATENATE("'C:\Pathtofile\[";O282;"]";$O$283;"'!";ADDRESS(11;KOLUMN()-23));1)

其中O282是我想要引用的工作簿(以这种方式引用,因为我需要迭代一些工作簿,如工作簿2015-01(O282),2015-02(P282)等),O283是相应工作簿的工作表,在这种情况下是静态的。我想在引用的工作簿和工作表中导入单元格D12的值,实际上INDEX执行此操作。 ; 1用于表示我只想返回1个单元格。 (我相信US excel使用“,”而不是“;”)。

问题是它返回:

 'C:\Pathtofile\[2015-01]Data'!$D$11
基本上是这样的。 INDEX引用是正确的,但它返回路径而不是预期的值。

编辑:

我试过了:

 =INDEX(CONCATENATE("'C:\Pathtofile\[";O282;"]";$O$283;"'!";ADDRESS(11;KOLUMN()-23):ADRESS(12;KOLUMN()-23));1)

获取数组D12:E12,然后引用第一个引用行的值,即D12。这虽然没有奏效,但它已经成为一种避免与INDEX相关的问题的方法,将我的输入解释为返回引用而不是值的意思。

1 个答案:

答案 0 :(得分:1)

在您的情况下,

INDEX有两个参数:引用和位置。您指定了地址,而不是引用,因此Excel将其理解为范围,其中包含一个值 - 这是您的地址并将其返回给您。你应该:

=INDEX(INDIRECT(CONCATENATE(...));1)

但是当您使用引用范围中的第一个值时,您可以执行以下操作:

=INDIRECT(CONCATENATE(...))