将INDIRECTreplace为INDEX以迭代已closures的工作簿

昨天我开始了一个话题,就是从一些工作簿中迭代单元格到一个新的总结工作簿。 为此,我使用了INDIRECT函数:

使用INDIRECT在工作簿之间迭代

但是,实现INDIRECT的backdrafts我想实现同样的事情,但通过使用INDEX,因为我已经从论坛上看到INDEX工作,即使被引用的工作簿是封闭的,INDIRECT不会。

然后,使用

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

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

问题是,虽然它返回:

  'C:\Pathtofile\[2015-01]Data'!$D$11 

所以基本上。 INDEX引用是正确的,但它返回的是path而不是预期的值。

编辑:

我试过了:

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

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

在你的情况下, INDEX有两个参数:参考和位置。 而不是引用,你指定的地址 ,所以Excel了解它作为范围内的一个值 – 这是你的地址,并返回给你。 你应该:

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

但是,当您使用引用范围中的第一个值时,您可以简单地执行:

 =INDIRECT(CONCATENATE(...))