Excel公式需求:计算两日期间各月工作日天数(排除周末)
可横向拖拽的Excel公式:计算起止日期间每月工作日(排除周末)天数
需求背景
需要编写可横向拖拽的Excel公式,计算指定起止日期范围内每个月的工作日天数(排除周六周日),原公式已实现自然天数计算,需修改适配工作日场景。示例数据如下:
| START DATE | END DATE | May | Jun | Jul | Aug | ... | |
|---|---|---|---|---|---|---|---|
| 2 | 28/06/23 | 04/07/23 | 0 | 3 | 2 | 0 | ... |
原自然天数公式
=MAX(0,MIN(IF($B2="",TODAY(),$B2),EOMONTH(DATEVALUE(C$1&"-23"),0))-MAX($A2,DATEVALUE(C$1&"-23"))+1)
修改后的工作日公式
=MAX(0,NETWORKDAYS(MAX($A2,DATEVALUE(C$1&"-23")),MIN(IF($B2="",TODAY(),$B2),EOMONTH(DATEVALUE(C$1&"-23"),0))))
公式说明
- 日期边界定位
DATEVALUE(C$1&"-23"):将表头的月份名称(如May)转换为对应年份(示例为2023)的当月1号日期MAX($A2, DATEVALUE(C$1&"-23")):取实际起始日期与当月1号的较晚值,作为工作日计算的有效起始点MIN(IF($B2="",TODAY(),$B2), EOMONTH(DATEVALUE(C$1&"-23"),0)):取实际结束日期(若B2为空则用当日)与当月最后一天的较早值,作为工作日计算的有效结束点
- 工作日计算核心
NETWORKDAYS(起始点, 结束点):Excel内置函数,自动统计两个日期之间的工作日数量(默认排除周六、周日)
- 异常值修正
MAX(0, ...):当起始点晚于结束点时(如示例中May列的情况),返回0避免出现负数结果
示例验证
以第2行数据为例:
- May列:起始点(28/06/23)晚于May最后一天(31/05/23),返回0
- Jun列:计算28/06/23至30/06/23的工作日,共3天(周三、周四、周五)
- Jul列:计算01/07/23至04/07/23的工作日,共2天(周一、周二,排除周六、周日)
内容的提问来源于stack exchange,提问作者Dylan Fischer
相关产品推荐
相关产品推荐

