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


