如何在含年份的Excel数组中按指定日月统计跨年度日期出现次数
跨年度统计特定日月的出现次数解决方法
核心思路
跳过日期的年份部分,仅匹配月份和日期的数值,就能实现跨年度统计需求,无需修改原有表格的年份数据或E4的单元格格式。
单年度统计改进公式
将原有的完整日期匹配逻辑,改为提取月、日进行匹配,公式如下:
=SUMPRODUCT((MONTH('2022'!A$2:A$38)=MONTH(E4))*(DAY('2022'!A$2:A$38)=DAY(E4)))
MONTH(单元格):提取日期的月份数值(如11月返回11)DAY(单元格):提取日期的日数值(如11日返回11)- 两个条件相乘后,SUMPRODUCT会自动统计同时满足月、日匹配的行数。
跨年度汇总公式
如果需要一次性统计2019-2022四个年度的总次数,有两种实现方式:
方式1:多表公式累加(直观易维护)
=SUMPRODUCT((MONTH('2019'!A$2:A$38)=MONTH(E4))*(DAY('2019'!A$2:A$38)=DAY(E4))) +SUMPRODUCT((MONTH('2020'!A$2:A$38)=MONTH(E4))*(DAY('2020'!A$2:A$38)=DAY(E4))) +SUMPRODUCT((MONTH('2021'!A$2:A$38)=MONTH(E4))*(DAY('2021'!A$2:A$38)=DAY(E4))) +SUMPRODUCT((MONTH('2022'!A$2:A$38)=MONTH(E4))*(DAY('2022'!A$2:A$38)=DAY(E4)))
注意:每个年度的日期范围(如A$2:A$38)如果不一致,需对应调整。
方式2:INDIRECT批量引用(适合年份连续的场景)
如果各年度工作表名称是规范的年份数字(如2019、2020),可以用INDIRECT函数批量生成表引用,简化公式:
=SUMPRODUCT(--(MONTH(INDIRECT("'"&ROW(2019:2022)&"'!A$2:A$38"))=MONTH(E4)),--(DAY(INDIRECT("'"&ROW(2019:2022)&"'!A$2:A$38"))=DAY(E4)))
- 旧版Excel需按
Ctrl+Shift+Enter作为数组公式执行,新版Excel动态数组功能无需此操作。 - 若年份不连续,可将
ROW(2019:2022)替换为{2019,2020,2021,2022}。
额外说明
- E4单元格无需修改格式,公式直接读取其底层的月、日数值,不受显示样式影响。
- 若日期列存在空白单元格,公式会自动忽略,不影响统计结果。
内容的提问来源于stack exchange,提问作者Julian Canny
相关产品推荐
相关产品推荐

