必须使用NETWORKDAYS、NETWORKDAYS.INTL、WORKDAY、WORKDAY.INTL四个函数配合动态节假日区域,才能精确计算或推算排除周末及法定节假日的工作日天数及日期。

如果您需要在Excel中精确计算两个日期之间的工作日天数,或推算指定工作日数后的到期日,但需自动跳过周末及法定节假日,则必须借助专用日期函数。以下是解决此问题的步骤:
一、使用NETWORKDAYS函数计算区间工作日天数
该函数专用于统计起始日期与结束日期之间的完整工作日数量,自动排除周六、周日,并可额外排除用户定义的节假日列表。
1、在目标单元格中输入公式:=NETWORKDAYS(开始日期单元格, 结束日期单元格, 节假日区域)。
2、确保节假日区域为连续垂直列(如$H$2:$H$10),且所有日期均为Excel可识别的日期格式(推荐用DATE函数或标准日期输入,避免文本格式)。
3、若无节假日需排除,可省略第三参数,仅保留前两个参数:=NETWORKDAYS(B2,C2)。
4、按Enter确认,结果将返回整数形式的工作日天数。
二、使用NETWORKDAYS.INTL函数自定义周末类型
当企业实行非标准作息(如单休星期日、大小周、做三休一等),需通过第三参数明确定义哪几天为“周末”,此时NETWORKDAYS.INTL可替代基础版本,实现灵活排除。
1、在目标单元格中输入公式:=NETWORKDAYS.INTL(开始日期单元格, 结束日期单元格, 周末编码, 节假日区域)。
2、周末编码填入对应数字:例如仅星期日休息填11,仅星期六休息填12,周一至周五上班填1(默认),完整编码表可在Excel公式提示中查看。
3、节假日区域仍需为绝对引用(如$H$2:$H$8),防止下拉填充时区域偏移。
4、确认公式后,单元格将显示符合自定义规则的工作日总数。
三、使用WORKDAY函数反向推算工期截止日或起始日
当已知项目启动日与所需工作日天数,需得出不含周末和节假日的完工日期;或已知交付截止日与工期,需倒推最晚开工日,应使用WORKDAY函数进行正向或负向位移计算。
1、正向计算(开工日后N个工作日的日期):在目标单元格输入=WORKDAY(起始日期单元格, 工作日天数, 节假日区域)。
2、负向计算(截止日前N个工作日的日期):将工作日天数设为负值,例如=WORKDAY(D2,-15,$H:$H),表示从D2往前推15个工作日。
3、节假日区域必须为绝对引用,否则复制公式时引用会变动导致错误。
4、确保起始日期单元格格式为“日期”,结果单元格也需设置为“短日期”或“长日期”格式才能正确显示。
四、使用WORKDAY.INTL函数处理特殊周末安排下的工期推算
当企业周末不固定为周六日,且需结合节假日排除进行正/负向日期推算时,WORKDAY.INTL是唯一支持同时定义周末模式与节假日的函数,适用于调休频繁、轮休制或国际业务场景。
1、在目标单元格中输入公式:=WORKDAY.INTL(起始日期单元格, 工作日天数, 周末编码, 节假日区域)。
2、周末编码规则与NETWORKDAYS.INTL一致,例如“0000011”表示仅周六、周日休息,“1000001”表示仅周一、周日休息。
3、节假日区域须为连续单元格区域,且所有日期必须为合法序列号格式,不可含空值或文本。
4、若工作日天数为小数,Excel将自动向下取整(如输入15.9视为15)。
五、构建动态节假日清单并联动引用
为避免每次更新假期都要手动修改公式中的引用范围,可将节假日单独建表并命名区域,使所有函数调用统一指向该动态范围,提升维护性与准确性。
1、在空白工作表(如“HolidayList”)的A2:A20列中逐行录入全部节假日日期。
2、选中该区域,点击【公式】→【定义名称】,名称填入Holidays,引用位置设为=HolidayList!$A$2:$A$20。
3、在任意公式中直接调用该名称,例如:=NETWORKDAYS(B2,C2,Holidays) 或 =WORKDAY(B2,10,Holidays)。
4、后续增删节假日只需在HolidayList表中操作,所有关联公式自动生效,无需逐个修改。










