如何计算两个日期区间内每周的工作日天数?求Excel实现公式
在Excel中计算日期区间内每周的工作日天数
完全可以通过Excel公式实现这个需求,以下分两种场景给出具体方案:
一、Excel 365/2021(支持动态数组)
假设起始日期存于单元格A2,结束日期存于B2,直接在空白单元格输入以下公式,会自动溢出生成所有周的起始日、结束日及对应工作日天数:
=LET( start_date, A2, end_date, B2, first_week_start, IF(WEEKDAY(start_date,2)=1, start_date, start_date-WEEKDAY(start_date,2)+1), total_weeks, CEILING((end_date - first_week_start + 1)/7,1), week_starts, SEQUENCE(total_weeks,1,first_week_start,7), week_ends, MIN(week_starts+6, end_date), CHOOSE({1,2,3}, week_starts, week_ends, NETWORKDAYS(week_starts, week_ends)) )
公式说明:
LET函数用于定义变量,简化公式结构- 自动计算区间内第一周的起始日(周一)
- 生成所有周的起始日序列,每周间隔7天
- 计算每周的结束日(周日,不超过给定的结束日期)
- 用
NETWORKDAYS计算每周工作日数(默认排除周六周日)
如果需要排除自定义节假日,只需修改NETWORKDAYS部分为:
NETWORKDAYS(week_starts, week_ends, $D$2:$D$10)
其中$D$2:$D$10为你的节假日日期列表区域。
二、旧版Excel(不支持动态数组)
需要手动下拉公式填充,步骤如下:
- 计算每周起始日(在
C2单元格输入,按Ctrl+Shift+Enter作为数组公式):
=IFERROR(MAX(MIN($A$2+ROW($A$1:$A$100)*7-7,$B$2),$A$2+ROW($A$1:$A$100)*7-8+1),"")
- 计算每周结束日(在
D2单元格输入,直接下拉):
=IF(C2<>"",MIN(C2+6,$B$2),"")
- 计算每周工作日数(在
E2单元格输入,直接下拉):
=IF(C2<>"",NETWORKDAYS(C2,D2),"")
下拉填充直到单元格出现空值即可。
自定义周末规则
如果你的周末不是周六周日,可使用NETWORKDAYS.INTL替代NETWORKDAYS,通过第二个参数指定周末规则,例如:
- 周四周五休息:
NETWORKDAYS.INTL(week_starts, week_ends, "0001100") - 仅周日休息:
NETWORKDAYS.INTL(week_starts, week_ends, "0000001")
内容的提问来源于stack exchange,提问作者msmm23
相关产品推荐
相关产品推荐

