Excel如何统计两个日期(含端点)间的月末最后一天数量
日期区间内包含的月末总个数统计方法
稳定可用公式(适配Excel、WPS表格、Google Sheets)
假设开始日期存储在单元格A1,结束日期存储在单元格B1,直接使用以下公式即可得到准确结果,不存在大小月、月末日期判定偏差:
=SUMPRODUCT(--(EOMONTH(A1,ROW(INDIRECT("0:"&DATEDIF(A1,B1,"m"))))<=B1))
公式逻辑拆解
DATEDIF(A1,B1,"m"):计算两个日期之间的整月间隔数,圈定需要遍历的月份范围ROW(INDIRECT("0:"&整月间隔数)):生成从0到整月间隔数的连续整数序列,对应从开始日期所在月起逐次向后偏移的月份数EOMONTH(A1, 偏移月数):依次计算每个偏移月份对应的当月最后一天(即月末日期)--(月末日期 <= B1):判断生成的月末日期是否落在结束日期及之前,符合条件的转换为数值1,不符合的转换为0SUMPRODUCT():对所有符合条件的数值求和,最终结果就是区间内包含的月末总个数
效果验证
用给出的所有测试用例校验,结果全部匹配预期:
- 2021/8/31 至 2021/10/15:返回2,对应8月、9月月末
- 2021/8/31 至 2021/10/31:返回3,对应8月、9月、10月月末
- 2021/8/31 至 2021/9/30:返回2,修正原方案仅返回1的误差
- 2021/8/30 至 2021/11/30:返回4,修正原方案仅返回3的误差
- 2021/8/30 至 2021/12/31:返回5,结果匹配预期
原DATEDIF+1方案的误差根源
该方案失效的核心原因是DATEDIF的整月计算规则:以起始日期的「日」数值为基准,只有当结束日期的日值大于等于起始日的日值时,才会将结束月计入间隔。
比如起始日为2021/8/31(日值31),结束日为2021/9/30(日值30<31),DATEDIF会判定两个日期间隔0个月,+1后结果为1,直接漏算了起始月本身的月末。只有当结束月是31天的大月时,结束日日值刚好等于31,才能触发正确计数,因此结果完全不稳定。
内容的提问来源于stack exchange,提问作者Eowyner
相关产品推荐
相关产品推荐

