Excel日期公式怎么算年龄和剩余天数

用DATEDIF、TODAY和NETWORKDAYS等日期函数,从出生日期算出年龄,从截止日期算出剩余天数,并处理已过期、固定统计日和日期格式等常见问题。

很多人在表格里记录了出生日期或合同截止日,却要靠手算或者每天打开计算器来更新年龄和剩余天数。其实 Excel 的日期函数可以自动完成这些计算,公式写好后向下填充,整列都会跟着更新。这篇文章面向经常做人员名单、合同台账、项目进度表的读者,讲清楚怎么用公式算出年龄,怎么算出距离截止日还剩多少天,以及遇到结果不对时如何排查。

读完之后,你应该能在自己的表格里直接写出年龄公式和剩余天数公式,知道哪些地方需要改成固定日期,也能判断一个结果是不是真的出错了。这里不涉及两个固定日期之间的差值计算,那种情况可以直接用日期相减,本文关注的是“以今天为基准”和“按年龄规则”的算法。

怎么用日期函数算年龄和剩余天数?一句话结论

结论:整岁年龄用 DATEDIF 配合 TODAY(),剩余天数用截止日期直接减去 TODAY(),需要固定结果时再换成统计日期单元格。

你的情况推荐做法原因
只需要整岁年龄用 DATEDIF(出生日期单元格,TODAY(),"Y")按周年自动计算,过了生日才加一岁,不用手动比较月份
要算到某个固定日期的年龄把 TODAY()换成统计日期所在单元格结果不会每天变化,适合统计报表和存档
只想知道截止日还剩几天截止日期单元格减 TODAY()直接,正数是剩余天数,负数表示已过期
需要区分已过期的情况用 IF 判断后再显示结果避免表格里出现看不懂的负数
只算工作日用 NETWORKDAYS(TODAY(),截止日期单元格)自动跳过周末,传入节假日区域后还会跳过假期

开始之前:先确认这几点

动手写公式前,先确认下面几件事,否则公式可能算对了,结果却不是你要的。

  • 日期是不是真正的日期。 在 Excel 里,真正的日期是数字,只是显示成日期格式。如果你从网页或 PDF 复制过来的日期靠左对齐,多半是文本,公式会报错或得到错误结果。遇到这种情况,可以重新输入,或者用分列功能统一转换。
  • “今天”要不要随时间变化。 TODAY()每次打开表格都会取当天日期,年龄和剩余天数都会跟着变。如果你要做的是某一天的快照,比如截至月底的统计,就应该使用一个固定的统计日期单元格,否则下个月打开时结果会全部改变。
  • 年龄按哪种规则算。 多数场景按周年计算,即过了生日才加一岁。如果你的规则是按自然年份相减,那么公式会不一样,需要先和使用者确认口径,避免同一张表里两种算法混用。
  • 截止日期是否包含当天。 剩余天数用截止日减今天,当天截止会显示 0。如果你的规则要求当天也算一天,需要在公式里加 1,或在说明里写清楚。
  • 是否需要排除周末和节假日。 合同和审批常以工作日计算,此时应使用 NETWORKDAYS,而不是简单相减,否则周末也会被计入。

在 Excel 里计算年龄和剩余天数的步骤

下面以一张人员和合同表为例,假设 A 列是姓名,B 列是出生日期,C 列是合同截止日期。

  1. 整理日期列。 在 B 列输入出生日期,在 C 列输入截止日期,选中这两列,把单元格格式设为日期,确保显示与数值一致。
  2. 检查日期是否有效。 点击 B2,看编辑栏里显示的是不是你输入的日期。如果显示成一串数字,说明格式没有改对;如果输入后左对齐,说明可能是文本,需要重新输入。
  3. 在 D 列写年龄公式。 在 D2 输入 =DATEDIF(B2,TODAY(),"Y"),回车后即可看到整岁年龄。DATEDIF 是 Excel 保留的日期函数,在函数列表中不一定能搜到,但直接手动输入就能使用。
  4. 在 E 列写剩余天数公式。 在 E2 输入 =C2-TODAY(),结果为正数表示距离截止日还有几天,为 0 表示当天截止。
  5. 处理已过期的情况。 如果希望过期后显示提示而不是负数,可以把 E2 改为 =IF(C2>=TODAY(),C2-TODAY(),"已过期"),这样更容易在表格里一眼看出状态。
  6. 需要工作日时改用 NETWORKDAYS。 在 F2 输入 =NETWORKDAYS(TODAY(),C2),结果会计入起止两天并跳过周六和周日。若有节假日,可以把日期列表放在某一区域,然后作为第三个参数传入,例如 =NETWORKDAYS(TODAY(),C2,H2:H20)。
  7. 需要固定统计日时替换 TODAY()。 在表格上方的某个单元格(比如 G1)输入统计日期,然后把所有公式中的 TODAY()换成$G$1,年龄和剩余天数就会以这一天为准,不再随打开日期变化。
  8. 向下填充。 选中 D2 到 F2,拖动填充柄到最后一行。检查几行的结果是否与手算一致,再交给他人使用。

如果出生日期或合同截止日期原本在 PDF 表格里,可以先用 OmniDoc 桌面客户端(download.omnidoc.top)的 PDF 导出为 Excel 功能,把表格转成可编辑的文件,再按上面的步骤计算。

做完后逐项核对

公式写完后,不要直接相信结果,建议逐项检查下面几个方面。

检查项怎么看有问题怎么办
结果是不是一串数字剩余天数或年龄列显示成类似日期的数字把对应单元格格式改为常规或数字,日期列则保持日期格式
年龄是否与手算一致随机选两三行,按生日手动数一下检查出生日期是否输错年份,或是否误用了其他公式
剩余天数的正负是否合理已经过去的截止日应显示负数或已过期提示如果没有显示提示,检查是否遗漏 IF 判断
是否出现#VALUE!错误错误通常出现在日期为文本的单元格重新输入日期,或用分列功能把文本转为日期
是否出现#NUM!错误常见于 DATEDIF 中开始日期晚于结束日期检查参数顺序,确保出生日期在前、今天在后
结果是否随日期变化隔一天再打开,看数值是否改变如需固定结果,改用统计日期单元格替换 TODAY()

另外,闰年出生的人在非闰年计算生日时,Excel 的处理方式可能与你的预期不同。如果表格涉及 2 月 29 日出生的人员,建议在说明中写清楚生日的判断规则,或者人工复核这几行。

📊 核心对比

计算年龄和剩余天数时,常见的做法主要有三种,它们的区别在于结果依据什么变化。

做法结果随什么变化适合场景
TODAY()加 DATEDIF 或减法每天打开都会变化日常提醒、即将到期的跟踪
固定统计日期单元格只随统计日期修改而变化月报、季报、需要留档的数据
NETWORKDAYS 工作日计算随当天日期变化,并跳过周末和假期合同工期、审批时限、排期

选择哪一种,关键看表格的用途。如果只是自己看,TODAY()省事;如果要发给别人或留作记录,固定统计日更稳妥;涉及工作日的规则,则要用 NETWORKDAYS 并维护节假日列表。

❓ 常见问题(FAQ)

1. 为什么输入公式后显示的是一串数字?

这通常是因为单元格格式不对,Excel 把日期当作序号显示。选中结果列,把格式改为常规或数字即可。如果是日期列本身显示成数字,则需要改回日期格式。

2. 找不到 DATEDIF 函数,是不是 Excel 版本不支持?

DATEDIF 是 Excel 为了兼容旧版本保留的函数,在插入函数的列表里通常不显示,但直接在单元格中输入完整公式仍然可以使用。如果公式无法识别,再检查拼写和括号是否完整。

3. 截止日期已经过去,剩余天数为什么是负数?

这是因为公式算的是截止日减今天,过期时结果自然为负。可以用 IF 判断,把负数改成“已过期”之类的文字,既好看也方便筛选。

4. 能不能把剩余天数直接显示成几年几个月几天?

可以用 DATEDIF 分别取年数和月数,例如用"Y"和"YM"。但天数部分用"MD"时在某些情况下结果可能不准确,建议拿几组样本核对后再使用,不要直接依赖。

5. 如果没有 Excel,有没有其他办法算年龄?

可以手动按生日和今天的日期比较,或使用通用的在线日期计算器。无论用什么工具,都建议用几组已知结果的数据做核对,确认口径一致后再批量处理。

📝 总结

用 Excel 函数公式自动算年龄和剩余天数,关键是先理清日期格式、计算口径和基准日期。整岁年龄用 DATEDIF,剩余天数用截止日减 TODAY(),需要固定结果就换成统计日期单元格,工作日场景则使用 NETWORKDAYS。公式写好后,记得抽查几行并核对显示格式,这样表格才能长期可靠地使用。

打开 OmniDoc,处理你的表格文件

更新于 2026-11-04