在 Excel 中通过身份证号计算年龄其实非常方便:只要从身份证号码第 7 位开始提取 8 位出生日期,再结合 DATEDIF 和 TODAY 函数,就能快速算出准确的周岁年龄。本次演示环境为 Microsoft Excel,版本是 Microsoft 365,最常用、也最省时的公式如下:=DATEDIF(TEXT(MID(A2,7,8),"0000-00-00"),TODAY(),"Y")。
第一步:整理身份证号列
先将所有身份证号码统一放在同一列中,示例中 A 列存放身份证号,B 列用于返回出生日期或年龄结果。身份证号码建议设置为文本格式保存,特别是末尾含有 X、或者号码前面可能存在 0 的情况;如果单元格左上角出现绿色小三角,通常说明 Excel 已将其按文本识别处理,这种状态是正常的。
第二步:提取出生日期
在 B2 单元格输入公式 =TEXT(MID(A2,7,8),"0000-00-00")。这里先使用 MID 函数从身份证号第 7 位开始提取 8 个字符,准确获取出生年月日;再通过外层的 TEXT 函数,把类似 19970319 这样的数字串转换成 1997-03-19 这种标准日期格式。这样不仅查看起来更直观,也能为后续用 Excel 身份证号算年龄打好基础,减少因日期格式不统一导致的报错。

第三步:计算当前整岁年龄
如果不想额外保留出生日期这一列,也可以直接在年龄列输入 =DATEDIF(TEXT(MID(A2,7,8),"0000-00-00"),TODAY(),"Y")。其中,TODAY() 会自动返回系统当天日期,DATEDIF 的第三个参数填写 "Y",表示按整年计算,最终返回的是已经扣除“生日是否已到”后的实际周岁年龄。

第四步:向下填充并核对结果
确认第一条年龄结果无误后,就可以直接拖动,或者双击单元格右下角的填充柄,将公式批量应用到下面所有行。复核时建议至少抽查两条数据:一条是今年生日已经过了的,另一条是今年生日还没到的。尤其不要把 YEAR(TODAY())-出生年份 这种简化写法当作通用公式,因为遇到生日尚未到来的情况时,结果会多算 1 岁,年龄计算自然就不准确。

用到的函数语法
| 函数 | 语法 | 关键参数 | 本例写法 |
|---|---|---|---|
MID | MID(text,start_num,num_chars) | text 是原始文本,start_num 是起始位置,num_chars 是提取的字符长度 | MID(A2,7,8) |
TEXT | TEXT(value,format_text) | value 是要格式化的值,format_text 是格式代码 | TEXT(MID(A2,7,8),"0000-00-00") |
TODAY | TODAY() | 无参数,返回当前系统日期 | TODAY() |
DATEDIF | DATEDIF(start_date,end_date,unit) | start_date 是出生日期,end_date 是截止日期,unit 填 "Y" 表示按整年计算 | DATEDIF(出生日期,TODAY(),"Y") |
DATEDIF 在部分 Excel 版本中可能不会出现在函数提示列表里,但手动输入后依然可以正常使用。这套 Excel 身份证号计算年龄公式仅适用于 18 位二代身份证,因为这类证件的出生日期固定在第 7 到第 14 位;如果是早期的 15 位身份证号码,出生年份只有后两位,不能直接套用这套公式。
常见错误怎么改
| 现象 | 常见原因 | 处理办法 |
|---|---|---|
结果显示 #VALUE! | 身份证号码长度不正确,或者提取出的 8 位内容不是有效日期 | 先用 =LEN(A2) 检查是否为 18 位,再核对第 7 到第 14 位是否为合法日期 |
结果显示 #NUM! | 出生日期晚于今天,或者日期没有被 Excel 正确识别 | 检查身份证号是否录入错误,必要时先单独提取出生日期列进行核对 |
公式显示 #NAME? | 函数名称拼写错误,或者公式中使用了中文引号 | 函数名必须使用英文,公式里的引号和逗号也要使用英文半角符号 |
| 年龄比实际大 1 岁 | 仅使用了 YEAR(TODAY())-出生年份 这种简化算法 | 改用 DATEDIF(出生日期,TODAY(),"Y"),让 Excel 自动判断生日是否已经过了 |
扩展示例
| 需求 | 公式 | 说明 |
|---|---|---|
| 先提取出生日期 | =TEXT(MID(A2,7,8),"0000-00-00") | 适合需要单独查看出生年月日的工作表 |
| 直接计算年龄 | =DATEDIF(TEXT(MID(A2,7,8),"0000-00-00"),TODAY(),"Y") | 一列公式即可直接返回周岁年龄 |
| 年龄后加“岁” | =DATEDIF(TEXT(MID(A2,7,8),"0000-00-00"),TODAY(),"Y")&"岁" | 适合用于报表展示,但后续统计汇总前建议保留纯数字年龄列 |
| 按指定日期计算年龄 | =DATEDIF(TEXT(MID(A2,7,8),"0000-00-00"),DATE(2026,12,31),"Y") | 适合在年底、入职日或考试截止日等场景下统计年龄 |
在处理批量名单时,建议先抽取一两条身份证号码,手动核对出生日期和年龄结果是否正确,再向下填充整列公式。提前把号码位数、日期格式、英文符号等细节问题排查清楚,后续无论是按年龄段筛选,还是制作数据透视表,数据都会更稳定,统计结果也更可靠。
