如何根据当前日期在公式中动态引用不同年度工作表?
动态引用年份工作表实现滚动数据提取
你的写法不可行的原因
直接在单引号中使用YEAR(TODAY())这类函数无法被Excel识别为工作表名称,Excel会把'year(today())'当作字面意义的工作表名(而非计算后的年份),导致引用错误。
修正后的可行公式
需要使用INDIRECT函数动态解析生成的工作表名称,它能将文本字符串转换为有效的单元格/区域引用。
基础修正版
=IF($D27="",0,IF($C35="PY",VLOOKUP(D30,INDIRECT("'"&YEAR(TODAY())-1&"'!$A$15:$M$209"),$B35,FALSE),VLOOKUP(D30,INDIRECT("'"&YEAR(TODAY())&"'!$A$15:$M$209"),$B35,FALSE)))
简化优化版(减少冗余代码)
合并年份判断逻辑,压缩公式长度:
=IF($D27="",0,VLOOKUP(D30,INDIRECT("'"&IF($C35="PY",YEAR(TODAY())-1,YEAR(TODAY()))&"'!$A$15:$M$209"),$B35,FALSE))
更高效的实现方案
如果你的Excel版本支持XLOOKUP(Office 365/2021及以上),推荐用它替代VLOOKUP——无需限制查找列在最左侧,逻辑更直观:
=IF($D27="",0,XLOOKUP(D30,INDIRECT("'"&IF($C35="PY",YEAR(TODAY())-1,YEAR(TODAY()))&"'!$A$15:$A$209"),INDIRECT("'"&IF($C35="PY",YEAR(TODAY())-1,YEAR(TODAY()))&"'!"&CHAR(64+$B35)&"$15:"&CHAR(64+$B35)&"$209")))
进阶:真正的滚动12个月数据
如果需要提取的是连续12个月(而非仅当前年/去年整表),比如当前是2024年3月,要取2023年3月-2024年2月的数据,仅靠公式会比较复杂,推荐用以下方法:
- 使用Power Query将所有年份工作表的数据合并成带日期列的总表
- 在总表中添加辅助列,判断日期是否在近12个月范围内
- 直接从合并后的总表中查询所需数据,这种方法的维护性和效率都更高
内容的提问来源于stack exchange,提问作者Andy Latham
相关产品推荐
相关产品推荐

