索引函数从关闭的工作簿中提取值,但使用单元格值作为工作表名称



我有 2 个工作簿,在每本书中,每张纸都是一年中的月份。 源书和目标书具有相同的工作表名称,例如。2019年8月,2019年9月..... 我在目标书单元格 B9 中创建以下公式,以从源工作簿单元格 AJ46 中提取值:

=INDEX('C:\FTPDownloads\Villa Stuff[入住图表修订版 1d.xlsx]Aug 2019'!$AJ$46,1(

即使关闭源书,它也能正常工作。
在目标书中,我使用以下公式加载了单元格 Q3:

=MID(CELL("filename",A1(,FIND("]",CELL("filename",A1((+1,255(

这会将目标书中的单元格 Q3 与当前活动工作表一起加载。 因此,单元格 Q3 的值为 2019 年 8 月。 目标书中有 20 份 INDEX 公式,唯一改变的是末尾的源单元格,在上面的公式中是 AJ46。 为了防止在将工作表扩展到未来月份时不断更改 INDEX 公式,我想使用单元格 Q3 中的值来代替输入实际的工作表名称。 我试过:

=INDEX('C:\FTPDownloads\Villa Stuff[占用图表修订版 1d.xlsx]"&Q3&"'!$AJ$46,1(

但它会产生错误。 我正在使用 Excel 2007。

首先,如果你只想返回一个特定的单元格,比如AJ46,为什么不直接引用单元格地址而不使用INDEX函数呢?我相信无论其他工作簿是否打开,以下内容也将返回所需的值。

='C:FTPDownloadsVilla Stuff[Occupancy Chart Rev 1d.xlsx]Aug 2019'!$AJ$46

其次,网上甚至在这个社区中都对这个话题进行了充分的讨论,就像这篇文章一样。简单的结论是:

无法使用Excel公式创建动态工作簿/工作表/范围/单元格名称并从关闭的工作簿中返回所需的值。

第三,可以使用VBA来完成。如果这是您的选择,您可能希望将#vba添加到您的标签中,以便其他贡献者能够帮助您,#vba这不是我的专长。在我之前提到的帖子中,有人提供了一个vba代码,该代码适用于直接单元格引用,但不包含INDEX。如果这是您的选择,您可能需要试一试。

第四,供您参考,也可以使用PowerQuery完成,但它仅在Excel 2010及更高版本中可用。此外,无论如何,PowerQuery处理大型原始数据集而不是结构化报告的效果最好。

最新更新