Excel 怎么算星期几、工作日、到期日
排班表要知道某天是周几、账期要算两个日期之间有几个工作日、合同到期要算 N 个工作日后是哪天——这三件事 Excel 分别对应 WEEKDAY、NETWORKDAYS、WORKDAY 三个函数。本文逐一讲清用法和易踩的坑,再教你用超级表的公式面板点选完成,或直接让 AI 一句话算出来。
算星期几:WEEKDAY 函数
Excel 用 WEEKDAY(日期, 返回类型) 把一个日期换算成数字表示的星期。最常用的写法是:
=WEEKDAY(A2, 2)
第二参数 2 表示「以周一为第 1 天」,返回值 1=周一、2=周二……7=周日,符合中国习惯。
如果你想直接在单元格里显示「星期一」「星期二」这样的中文,不用 WEEKDAY——更简单的办法是把单元格格式设置为自定义 aaaa(四个 a),Excel 就会自动把日期渲染成「星期X」。只是「显示」变了,存储的还是日期值,不影响其他计算。
实例:A2 = 2026/6/4(周四),=WEEKDAY(A2,2) 返回 4;单元格自定义格式 aaaa 后显示「星期四」。
想用 WEEKDAY 的数字再转文字,可以配合 CHOOSE:
=CHOOSE(WEEKDAY(A2,2),"周一","周二","周三","周四","周五","周六","周日")
这样返回的就是可参与文本拼接的字符串,比如放进排班单里显示「6月4日(周四)」。
算工作日间隔:NETWORKDAYS 函数
两个日期之间有多少个工作日(不含周六日),用:
=NETWORKDAYS(开始日期, 结束日期)
比如合同从 2026/6/1 签到 2026/6/30,期间有几个工作日:
=NETWORKDAYS("2026/6/1","2026/6/30") → 22(已自动排除 4 个周末)。
如果还要排除节假日(端午、国庆等),用第三参数传入一个存放节假日的单元格区域:
=NETWORKDAYS(B2, C2, 节假日!A:A)
「节假日」工作表里每一行存一个节假日日期,NETWORKDAYS 会把这些天也排除掉,得出真实的工作日天数。这对账期计算、排班统计都非常实用。
NETWORKDAYS.INTL 可以自定义哪些天是「休息日」,适合不是标准周末的排班场景。
算 N 个工作日后的日期:WORKDAY 函数
已知开始日期,往后数 N 个工作日,到期是哪天?用:
=WORKDAY(开始日期, 工作日天数, [节假日区域])
比如合同签订日 A2 = 2026/6/1,约定 30 个工作日内交付:
=WORKDAY(A2, 30) → 自动跳过周末,返回 30 个工作日后的具体日期。
同样,加上第三参数就能同时排除节假日:
=WORKDAY(A2, 30, 节假日!A:A)
返回的是一个日期序列值,记得把单元格格式设为「日期」才能看到可读的日期格式,否则会显示成数字。
实例:A2 = 2026/6/4,=WORKDAY(A2, 10) 会从 6/4 起数 10 个工作日,自动跳过两个周末,返回 2026/6/18。
这些函数常见的坑
- WEEKDAY 第二参数最容易写错。不传或传
1时是「周日=1、周一=2……」的美式顺序,和中国习惯相反,排班表里一用就错。记住:传2才是周一=1 的中国式顺序。 - 节假日列表要每年手动维护。NETWORKDAYS / WORKDAY 的节假日参数只认你自己在表里填的日期,Excel 不知道当年的法定节假日安排,每年调休方案一出来就得更新这张表。少填一天,结果就会差一两天。
- WORKDAY 返回的是数字,要设格式。新手经常算出来看到一串五位数,以为公式写错了——其实是单元格格式没设成日期,右键→设置单元格格式→日期就好。
- NETWORKDAYS 含首尾两端。比如同一天开始和结束,返回 1 而不是 0。如果你的业务逻辑里不含当天,记得 -1。
- 日期文本问题。如果单元格里存的是「2026年6月4日」这种文本而不是 Excel 日期,这三个函数都不认,要先用 DATEVALUE 或分列转为真日期。
更省事:超级表公式面板或 AI 一句话算
超级表(TableDI)是一款桌面端高能表格助手,macOS 和 Windows 都支持,离线本地运行、零登录。它有两种路径让你跳过记函数这一步:
路径一:公式面板(点选搭计算,含日期)
- 在超级表里打开你的表格,选中要填结果的那一列。
- 点击顶部工具栏「公式面板」,在「日期」分类下能找到「算星期」「算工作日间隔」「算 N 工作日后日期」等功能。
- 点选对应功能,再用下拉框选择「日期列」「天数列」「节假日列」等字段——公式自动生成,不用自己背参数顺序。
- 确认后结果自动填入整列,格式也自动设好。
路径二:AI 处理(一句话算)
- 选中包含日期的列,点「AI 处理」。
- 输入自然语言指令,比如「根据 A 列日期,在 B 列算出是星期几(中文)」或「根据开始日期和结束日期,算出工作日天数,排除节假日列表里的日期」。
- 超级表 AI 自动解析意图、生成公式并执行,把结果写到指定列。
对于需要每年更新节假日列表的场景,在超级表里维护一张节假日表格,配合公式面板关联进来即可,下次更新只改节假日表,计算自动跟着变。想了解更多日期函数的综合用法,可以参考Excel 日期函数完全指南;如果你还需要从身份证里提取出生日期再参与计算,可以看从身份证号提取生日。
Excel 公式 vs 超级表:对比一览
| 对比项 | Excel 原生公式 | 超级表 |
|---|---|---|
| 算星期几 | =WEEKDAY(A2,2),参数顺序要记住 | 公式面板点选「算星期」,或 AI 一句话指定 |
| 算工作日间隔 | =NETWORKDAYS(开始,结束,[节假日]) | 公式面板点选字段,自动拼参数 |
| 算 N 工作日后日期 | =WORKDAY(开始,天数,[节假日]),结果要手动设日期格式 | 结果格式自动处理 |
| 节假日维护 | 需要自己建表、每年手动更新,函数参数关联 | 维护节假日表后自动关联 |
| 不记函数名也能用 | 需要记住函数名和参数顺序 | AI 描述意图即可,无需记函数 |
常见问题
WEEKDAY 返回的是数字,怎么显示成中文「星期X」?
有两个办法:一是把单元格格式设为自定义 aaaa,日期会直接显示为「星期一」到「星期日」,这是最简单的方式。二是用 =CHOOSE(WEEKDAY(A2,2),"周一","周二","周三","周四","周五","周六","周日") 把数字转为文本字符串,方便拼进其他公式或文本里。
节假日怎么排除?调休怎么处理?
在 Excel 里新建一张工作表(如「节假日」),A 列逐行填入每个节假日的日期。NETWORKDAYS 和 WORKDAY 的第三参数传入 节假日!A:A 即可排除这些天。调休的工作日(原本是周末但要上班)Excel 函数无法自动处理——函数只知道周六日是休息,不知道调休安排。调休工作日最好另建一列「补班日」,在公式结果里手动修正,或改用超级表 AI 处理告知调休规则。
算自然日(含周末)用什么?WORKDAY 能算自然日吗?
WORKDAY 专门跳过周末,不能算自然日。算自然日直接用日期加减:=A2+30 就是 30 个自然日后的日期。要算两个日期相差多少自然日,用 =B2-A2(结果设为数值格式)。更多日期运算可以参考Excel 日期函数完全指南。