将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(...))