Menu

Excel NETWORKDAYS 与 WORKDAY 函数:计算工作日

=NETWORKDAYS(A2,B2) 计算从 A2 到 B2 的工作日(星期一至星期五)天数,两端日期都计入。=WORKDAY(A2,10) 返回 A2 之后第 10 个工作日的日期。两个函数都可以跳过节假日列表。

本页的每张表格都是实时的:修改数字或公式,就会重新计算。

=NETWORKDAYS(A2,B2) 计算从 A2 的日期到 B2 的日期之间的工作日天数,两端都计入,工作日指星期一至星期五。=WORKDAY(A2,10) 方向相反:它返回 A2 之后第 10 个工作日的日期。

每个项目的工作日天数
C2
ABCD
1StartEndWorking daysCalendar days
22026-03-022026-03-131012
32026-03-022026-03-312230
42026-03-062026-03-0924
52026-03-072026-03-0802
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

第一个项目从星期一持续到下一周的星期五:12 个日历日,10 个工作日。2026 年 3 月从 2 日起共有 22 个工作日。星期五到下周一是 2,只有周末则是 0。改一个结束日期,看看天数如何变化。(只算普通天数请看两个日期之间的天数。)

带节假日的 NETWORKDAYS

第三个参数是除周末之外还要跳过的日期区域。把节假日单独放一列(或放在另一个工作表),并用 $ 锁定区域,这样公式向下填充时区域不会移动。

扣除节假日后的工作日
C2
ABCDE
1StartEndNo holidaysWith holidaysHolidays
22026-03-302026-04-101082026-04-03
32026-04-012026-04-3022202026-04-06
42026-04-272026-05-081092026-05-01
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

3 月 30 日到 4 月 10 日有 10 个工作日,其中两天是节假日(2026 年的耶稣受难日和复活节星期一),所以是 8 个工作日。只有落在各自时间段内的节假日才会被减去:最后一行只少了 5 月 1 日。删掉 E 列中的某个节假日,天数就会回升。

WORKDAY:按工作日算截止日期

WORKDAY(start_date, days, [holidays]) 返回开始日期之后若干个工作日的日期。开始日期本身不计入,结果永远不会是周末或节假日。

按工作日计算的截止日期
C2
ABCDE
1ReceivedDaysDueDue (holidays)Holidays
22026-03-27102026-04-102026-04-142026-04-03
32026-04-0232026-04-072026-04-092026-04-06
42026-04-2452026-05-012026-05-042026-05-01
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

星期五 2026-03-27 收到的请求,期限 10 个工作日,截止日期是 2026-04-10;跳过耶稣受难日和复活节星期一后则是 2026-04-14。天数为负时 WORKDAY 往前数:=WORKDAY(A2,-5) 是一周前的那个工作日。要找“下一个工作日”就用 1;如果日期本身已是工作日并想保留它,用 =WORKDAY(A2-1,1)。

其他周末:NETWORKDAYS.INTL

如果周末不是星期六和星期日,NETWORKDAYS.INTL 的第三个参数是周末代码,第四个参数才是节假日。

周末代码
星期六、星期日1(默认)
星期日、星期一2
星期五、星期六7
仅星期日11
仅星期六17
任意组合7 个字符,从星期一开始,1 = 休息日:"0000011"
2026 年 3 月不同周末下的工作日
C2
ABCDEF
1WeekendCodeWorking daysStartEnd
2Saturday and Sunday1222026-03-012026-03-31
3Friday and Saturday723
4Sunday only1126
5Mon, Wed, Fri only010101113
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

周末为星期六和星期日时,2026 年 3 月有 22 个工作日;周末为星期五和星期六时有 23 个;只休星期日时有 26 个。最后一行是兼职安排:0101011 表示除周末外星期二和星期四也休息,剩下 13 天。在单元格中,0101011 这样的代码必须是文本(输入时加一个前导撇号,'0101011),否则 Excel 会去掉开头的 0。

WORKDAY.INTL 对截止日期做同样的事。下面是 Excel 计算 2026 年 3 月 2 日(星期一)之后 10 个工作日的结果:

=WORKDAY.INTL(DATE(2026,3,2), 10)              2026-03-16   (Saturday and Sunday off)
=WORKDAY.INTL(DATE(2026,3,2), 10, 7)           2026-03-16   (Friday and Saturday off)
=WORKDAY.INTL(DATE(2026,3,2), 10, 11)          2026-03-13   (Sunday off)
=WORKDAY.INTL(DATE(2026,3,2), 10, "0000011")   2026-03-16   (same as code 1)

练习:工作日与截止日期

轮到你了:工作日
C2
ABCDE
1StartEndWorking daysHolidays
22026-04-012026-04-302026-04-03
32026-04-06
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 C2 中计算从 A2 到 B2 的工作日天数,两端都计入,并跳过 E2:E3 中的节假日。

轮到你了:截止日期
C2
ABC
1ReceivedDaysDue
22026-05-148
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 C2 中返回 A2 日期之后第 B2 个工作日的日期(跳过周末,没有节假日)。

NETWORKDAYS 两端都算,WORKDAY 不算开始日期

这两个函数在开始日期上相差 1,同时使用它们的人常会因此吃惊。NETWORKDAYS 从星期一到同周星期五是 5:两天都计入。WORKDAY 从那个星期一加 5 天,会落在下周一,因为它从第二天开始数。

两个函数之间的差一
C2
ABC
1StartWORKDAY(A2,5)NETWORKDAYS back
22026-03-022026-03-096
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

WORKDAY 返回 2026-03-09,而 NETWORKDAYS 从 2026-03-02 到这一天得到 6,不是 5。如果截止期限是“5 个工作日内,含今天”,且 A2 是工作日,就用 =WORKDAY(A2,4)。和团队定好采用哪种约定,并写在公式旁边。

常见问题

Excel 中如何计算两个日期之间的工作日天数?

=NETWORKDAYS(A2,B2) 计算从 A2 到 B2 之间星期一至星期五的天数,两个日期都计入。把节假日日期区域作为第三个参数,就能把它们也跳过:=NETWORKDAYS(A2,B2,$E$2:$E$4)。

Excel 中如何在日期上加工作日?

=WORKDAY(A2,10) 返回 A2 之后第 10 个工作日的日期,跳过星期六和星期日。负数表示往前推:=WORKDAY(A2,-5)。节假日区域作为第三个参数传入。

NETWORKDAYS 和 NETWORKDAYS.INTL 有什么区别?

NETWORKDAYS 总是把星期六和星期日当作周末。NETWORKDAYS.INTL 多一个周末参数:7 表示星期五和星期六,11 表示只有星期日,也可以用 "0000011" 这样的 7 位字符串,从星期一开始,1 表示休息日。

NETWORKDAYS 包含开始日期吗?

包含。只要开始日期和结束日期是工作日,NETWORKDAYS 都会计入,所以从星期一到同周星期五是 5。WORKDAY 不计开始日期:=WORKDAY(A2,1) 就是下一个工作日。

节假日落在周末会怎样?

不会多扣:NETWORKDAYS 和 WORKDAY 本来就跳过周末,所以落在星期六的节假日不会被减两次。

Coddy 编程语言插图

和 Coddy 一起学编程

开始