如何在Excel 2016中用非VBA公式计算两日期间每月天数
计算跨月日期区间内各月份的天数(非VBA公式方案)
假设起始日期存于单元格A1(示例:2023/1/5),结束日期存于单元格B1(示例:2023/3/17),以下是两种适配不同Excel版本的解决方案:
方案1:适配所有Excel版本(手动下拉)
- 生成月份序列
在C2单元格输入公式,生成区间内第一个月的第一天:
=EOMONTH(A1,-1)+1
下拉填充单元格,直到生成的月份超过结束日期所在月份(示例中下拉至C4,得到2023/1/1、2023/2/1、2023/3/1)。
- 计算对应月份天数
在D2单元格输入通用公式,下拉填充至所有月份行:
=MIN(EOMONTH(C2,0),B1)-MAX(A1,C2)+1
公式逻辑:
MAX(A1,C2):取起始日期与当月第一天的较大值,确定当月统计的起始点MIN(EOMONTH(C2,0),B1):取当月最后一天与结束日期的较小值,确定当月统计的结束点- 两者相减加1,得到当月的实际天数
示例计算结果:
D2:31-5+1=26(1月天数)D3:28-1+1=28(2月天数)D4:17-1+1=17(3月天数)
方案2:适配支持动态数组的Excel版本(一键生成)
直接用两个动态数组公式,自动生成所有月份和对应天数:
- 生成月份文本(如“2023年1月”):
=TEXT(SEQUENCE(DATEDIF(EOMONTH(A1,-1)+1,EOMONTH(B1,0),"M")+1,1,EOMONTH(A1,-1)+1,32),"yyyy年mm月")
- 生成对应天数:
=BYROW(SEQUENCE(DATEDIF(EOMONTH(A1,-1)+1,EOMONTH(B1,0),"M")+1,1,EOMONTH(A1,-1)+1,32),LAMBDA(x,MIN(EOMONTH(x,0),B1)-MAX(A1,x)+1))
注意事项
- 确保单元格
A1和B1为Excel可识别的日期格式,避免文本格式导致计算错误 EOMONTH函数为Excel内置函数,无需额外加载工具库
内容的提问来源于stack exchange,提问作者Yalin Guralp
相关产品推荐
相关产品推荐

