课程
Excel 提供多种为日期加天数的方法,选择哪一种取决于您的目标。有时您只需增加固定的日历天数;而在另一些情况下,您可能需要跳过周末,或只计算工作日和节假日规则。
在本教程中,我将向您展示在 Excel 中为日期加天数的不同方法,如何排查常见错误,并进行适用于不同场景的高级日期计算。
如果您刚开始学习 Excel,我们的Excel 入门课程涵盖界面导航、数据格式理解与基础函数等技能。另外,我也推荐可下载的Excel 公式速查表,它收录了最常用的 Excel 函数,是非常实用的参考资料。
在 Excel 中为日期加天数的方法
本节将比较最常见的方法,从最简单直接的方式开始。
方法一:简单算术(直接加减天数)
为日期加天数的最快方法是使用基本算术。由于 Excel 将日期存储为数字,您可以像处理其他数值一样进行加减。使用简单算术您可以做到以下操作:
使用公式增加天数
如果单元格A2包含日期,您可以直接加上一个数字。例如,下面的公式会在 A2 的日期上增加 7 个日历日,并返回新日期。
=A2 + 7

使用负数来减去天数
您也可以减去一个数字以得到过去的日期。例如,下面的公式将日期提前 5 天。
=A2 - 5

将公式应用到多行
要将相同的逻辑应用到一列日期:
- 在首行输入公式。
- 选中该单元格。
- 拖动填充柄向下以将公式复制到其他行。
Excel 会自动调整单元格引用,因此该方法在处理大型数据集时非常高效。

使用“选择性粘贴”快速调整
如果您完全不想使用公式,可以使用选择性粘贴,按照以下步骤:
- 在空白单元格中输入要增加的天数。
- 复制该单元格。
- 选中要调整的日期单元格。
- 右键选择选择性粘贴 → 加。Excel 会立即更新所有这些日期,并将其保留为静态值而不是公式。

该简单算术方法的局限在于它总是计算每个日历日,因此会包含周末和节假日。这可能不适用于业务时间表、项目进度或薪资计算。在这些情况下,您需要更高级的方法,我将在后文中介绍。
方法二:使用 DATE() 函数进行结构化与条件计算
DATE() 函数在您需要更精细地控制日期的构建或调整方式时非常有用。它非常适合结构化计算、条件逻辑以及日期可能动态变化的场景。
DATE() 的结构与参数
以下是 DATE() 函数的基本语法:
=DATE(year, month, day)
其中:
- year:年份
- month:月份数字
- day:当月的日
因此,您可以通过提取日期组成部分来重建日期。例如,下面的公式通过仅修改“日”的部分,在保留原年份与月份不变的情况下,为 A2 的日期增加 10 天。
=DATE(YEAR(A2), MONTH(A2), DAY(A2) + 10)
`

处理月末与年末边界
DATE() 函数的一大优点是会自动处理溢出。例如,如果您在 1 月 29 日上加 5 天,Excel 会得出 2 月 3 日。

DATE() 也会自动处理闰年。例如,对闰年 2 月的日期加天数时,会正确考虑 2 月 29 日,无需额外逻辑。

使用单元格引用构建灵活公式
与其硬编码数值,不如引用单元格,使公式在各行中更具动态性和可复用性。
=DATE(YEAR(A2), MONTH(A2), DAY(A2) + B2)

处理空白或无效日期
当源单元格为空或包含无效数据时,您可以用 IF() 或 IFERROR() 包裹公式来避免错误。这可以保持工作表整洁,防止出现不必要的错误信息。
下面的公式会在源单元格为空或其值不是日期格式时返回空白单元格。
=IFERROR(DATE(YEAR(A2), MONTH(A2), DAY(A2) + B2), "")

方法三:使用 EDATE() 为日期加上月份和年份
当您希望按整月或整年调整日期时,Excel 中的 EDATE() 函数在日期计算中非常重要。
EDATE() 的用途与语法
EDATE() 会将日期按指定月数平移。其语法如下:
=EDATE(start_date, months)
其中:
-
start_date:起始日期 -
months:需要增加或减少的月份数
下面的公式会在现有日期上加 3 个月:
=EDATE(A2, 3)

同理,使用负数即可减去 3 个月。
=EDATE(A2, -3)

用月偏移来加减年份
您可以借助 EDATE() 并在 month 参数中使用月份数来加减年份。例如,下面的公式会从单元格 A2 的日期减去 2 年(24 个月)。
=EDATE(A2, -24)

将 EDATE() 与简单算术结合
您还可以将 EDATE() 与“月”和“日”的调整结合用于特定场景。例如,下面的公式在单元格 A2 的日期上加 2 个月并再加 7 个日历日。
=EDATE(A2, 1) + 7

方法四:使用 WORKDAY() 与 WORKDAY.INTL() 进行工作日计算
WORKDAY() 与 WORKDAY.INTL() 可以在加减天数时自动跳过非工作日。这些函数非常适合项目时间表、截止日期和运营日程。
使用 WORKDAY() 跳过周末
Excel 中的 WORKDAY() 函数会自动跳过周六和周日。其语法如下:
=WORKDAY(start_date, days)
其中:
-
start_date:起始日期 -
days:要增加或减少的天数
例如,下面的公式会在 A2 的日期上加 5 个工作日,自动跳过周六和周日。
=WORKDAY(A2, 5)

结合节假日清单
假设您希望在 Excel 中加天数时同时考虑法定节假日与公司统一休假。请按以下步骤确保计算准确:
-
在单独的区域(如
D2:D5)创建节假日日期清单。 -
将该区域作为
WORKDAY()的第三个参数加入。
=WORKDAY(A2, 5, D2:D5)

使用该方法时,范围 D2:D5 中列出的任何日期都会被排除在计算之外,即使它们落在工作日。
与其在公式中硬编码假期单元格,最佳做法是将假期维护在专门的列或表中。并尽量使用命名范围或Excel 表。这样可以让公式更简洁,并确保整个工作簿中的工作日计算一致。
我建议学习我们的高级 Excel 函数课程,了解 Excel 中的偏移与动态范围。
使用 WORKDAY.INTL() 自定义周末模式
由于并非所有工作安排都以周六—周日为周末,Excel 提供 WORKDAY.INTL() 来定义自定义周末模式。其语法如下:
=WORKDAY.INTL(start_date, days, weekend, holidays)
其中:
-
start_date:计算的起点日期,不计为工作日。 -
days:要增加或减少的工作日天数。 -
weekend(可选):指定哪些天为周末。可用数字(1–17)表示预设周末模式[1 → 周六和周日(默认),2 → 周日和周一,7 → 周五和周六];也可用 7 位文本字符串,如"0000011",其中1表示周末,0表示工作日,起始于周一。 -
holidays(可选):需要同时从工作日中排除的日期范围或数组
例如,下面的公式返回 2026 年 1 月 15 日之后第 10 个工作日的日期,排除周六、周日以及单元格 D2:D5 中列出的假期。
=WORKDAY.INTL("2026-01-15", 10, 1, D2:D5)

相关函数:NETWORKDAYS() 与 NETWORKDAYS.INTL()
WORKDAY() 与 WORKDAY.INTL() 返回的是日期,而 NETWORKDAYS() 与 NETWORKDAYS.INTL() 则用于统计两个日期之间的工作日天数。当您需要衡量时长而非计算截止日期时,它们非常有用。
NETWORKDAYS() 用于统计两个日期之间的工作日,排除周六、周日和可选的节假日。在下面的示例中,该公式返回 7,即 1 月 1 日到 1 月 10 日之间(不含周末)的工作日天数。
=NETWORKDAYS("2026-01-01", "2026-01-10")
同样,NETWORKDAYS.INTL() 在自定义周末规则下统计工作日,适用于周末并非标准配置的地区。例如,下面的公式假设周五—周六为周末,返回对应的工作日天数。
=NETWORKDAYS.INTL("2026-01-01", "2026-01-10", 7)
需要注意的局限
尽管 WORKDAY() 与 WORKDAY.INTL() 对标准商务日历很实用,但也有以下局限:
- 无法处理轮班制或部分工作日
- 无法建模每日工时不一的复杂日历
- 高级排班可能需要辅助列或自定义逻辑
关于 Excel 日期系统的说明
在使用 Excel 处理日期时,您可能会遇到一些意料之外的结果,通常并非由公式本身引起。本节将帮助您了解背后的原理并避免常见陷阱。
Excel 将日期存储为序列号
Excel 将日期存储为序列号,每个整数代表一天。例如,1900 年 1 月 1 日存为 1,1900 年 1 月 2 日为 2,以此类推。由于日期是数值,您可以用简单算术进行加减,这也是日期公式在 Excel 中如此自然好用的原因。
日期与文本值
看起来像日期的内容并不一定真的是日期。真正的 Excel 日期是应用了日期格式的数字。基于文本的日期(常见于从外部系统导入)在计算中无法正常工作。引用文本日期的公式可能返回错误或不正确的结果。
要检查这种不一致,可将单元格格式改为常规。如果显示为数字,说明是真日期;若保持不变,则是文本。
1900 与 1904 日期系统
Excel 支持两种日期系统:Windows 默认的 1900 日期系统,以及历史上 macOS 使用的 1904 日期系统。
两种系统之间相差 1,462 天。因此,在共享包含日期计算的工作簿时,务必确认所有用户使用相同的日期系统,以确保一致性。
Excel 如何处理闰年
Excel 在进行日期计算时会自动考虑闰年。然而出于兼容性原因,Excel 将 1900 年视作闰年,尽管事实并非如此。该调整可能导致早期日期的表现略显异常,但对现代工作流程影响不大。
格式与区域设置的常见问题
根据我在 Excel 中处理日期的经验,常见问题主要来自以下方面:
- 区域设置对日期的解析不同,如 MM/DD/YYYY 与 DD/MM/YYYY。
- 导入数据中将日期存为文本
- 单元格之间格式不一致
这些问题可能导致公式无声失败或返回错误结果。下一节我将展示如何排查此类错误。
排查日期计算问题
从前文可见,日期计算中的错误并非都由公式不正确引起。以下是排查 Excel 中常见日期问题的方法。
识别并转换文本日期
如果日期以文本存储,WORKDAY() 或 EDATE() 等函数将无法工作。若文本格式可识别,您可以通过手动重新输入日期或使用 DATEVALUE() 进行转换。
您还可以使用分列工具修复导入的日期,步骤如下:
选中受影响的列
转到数据 → 分列

选择分隔符号或固定宽度

将列数据格式设置为日期。选择完成。

格式问题与序列号
如果单元格显示的是数字而非日期,通常是数值正确但格式不对。要修复,前往开始选项卡,点击数字格式下拉菜单,选择短日期。

查看Excel 快捷键速查表,学习不同 Excel 功能的快捷键以提升效率。
处理多余空格与非常规分隔符
导入的数据可能包含前导空格或非常规分隔符,如 " 01/21/2026"。您可以在进行其他操作前使用 TRIM() 或 SUBSTITUTE() 去除空格。
两位年份的歧义
两位数年份可能因系统设置不同而被不同解读。Excel 通常将 00–29 视为 2000 年代,将 30–99 视为 1900 年代。为避免问题,输入或导入日期时尽量使用四位年份(如 2029)。
使用辅助列管理混合输入
如果一列同时包含日期与“待定(TBD)”之类的备注,计算就会出错。为避免此问题,可使用辅助列清洗或转换数值,或使用 IFERROR() 捕获无效输入。
高级日期计算与动态场景
当您熟悉基本日期函数后,Excel 允许您构建更动态灵活的计算。本节将展示如何构建高级日期函数以实现自动化。
组合年份、月份与天数偏移
您可以通过组合函数在单个公式中同时调整日期的多个部分。例如,下面的公式在 A2 的原始日期上增加 1 年、2 个月和 10 天。Excel 会自动处理跨月或跨年的溢出。
=DATE(YEAR(A2) + 1, MONTH(A2) + 2, DAY(A2) + 10)

会计年度与非日历逻辑
并非所有组织都采用 1 月至 12 月的日历。您可以在提取年份前先调整月份来计算会计年度。例如,如果会计年度从 4 月开始,您可以按以下逻辑将日期回退 3 个月,并由此计算“会计年度”:
=YEAR(EDATE(A2, -3))

使用 TODAY() 与 NOW() 构建动态日期
如果您需要每天自动更新的计算,可以使用以下函数:
-
=TODAY():返回当前日期。 -
=NOW():返回当前日期与确切时间。

用 SEQUENCE() 生成日期序列
如果您需要快速创建连续日期列表,可以使用SEQUENCE() 函数。例如,=SEQUENCE(30, 1, TODAY(), 1) 会生成自今天起的 30 个日期。
用条件格式突出显示日期
如果您想在表格中突出显示重要日期,可以使用条件格式。例如,您可以应用格式来高亮临近的截止日期、标记逾期任务,或在视觉上区分过去与未来的日期。
我建议查看我们的Google 表格中的条件格式课程,学习如何通过条件格式进行数据校验并快速获得洞见。
结语
Excel 提供多种添加与管理日期的方法,选择合适的方法取决于具体用例。为保持工作簿高效,请在计算日历天时使用简单算术,在按月周期时使用 EDATE(),在业务排期时使用 WORKDAY(),并始终确认日期以真正的序列号而非文本存储。
如果您想提升 Excel 技能,我建议学习我们的Excel 数据分析课程。该课程将帮助您掌握高级分析,推动职业发展。我也推荐我们的Excel 中级 Power Query课程,学习数据转换以及使用 M 语言创建动态函数。
数据科学技术写作者,具备数据分析、商业智能和数据科学的一线实践经验。我撰写以行业为导向的实用内容,涵盖 SQL、Python、Power BI、Databricks 和数据工程,并以真实的分析工作为基础。我的写作兼顾技术深度与业务影响,帮助专业人士将数据转化为自信的决策。
FAQs
为日期加天数与加工作日有什么区别?
使用简单算术如 =A2+7 可增加所有日历日,而 =WORKDAY(A2, 7) 会跳过周末(以及已列出的假期)。
如何在 Excel 中为日期加上月份或年份?
使用 EDATE() 为日期加减月份。要加年份,可将月份数乘以 12。
如何创建会自动更新的动态日期计算?
使用 TODAY() 或 NOW() 等函数,使日期根据当前日期自动重新计算。
使用 TODAY() 或 NOW() 等函数,使日期根据当前日期自动重新计算。
Excel 将日期存为序列号。如果您看到的是数字,请将单元格格式更改为日期以正确显示。
我什么时候该用 WORKDAY.INTL() 而不是 WORKDAY()?
当周末并非周六和周日,或您需要自定义非工作日时,请使用 WORKDAY.INTL()。
