乐于分享
好东西不私藏

Excel 身份证提取生日:MID 函数这样套才不出错

Excel 身份证提取生日:MID 函数这样套才不出错

后台常收到这样的问题:几百个员工的身份证号都在表里,生日却要一个个手动填。其实身份证号里就藏着出生日期,用 MID 函数一次全提出来,两分钟的事。但很多人套完公式发现日期显示成一串数字,或者格式对不上,问题都出在细节上。今天把整个流程和坑一次讲清楚。

先弄清身份证号的结构

18 位身份证号里,第 7 位到第 14 位就是出生日期,格式是"年年年年月月日日"。比如 19950816 就代表 1995 年 8 月 16 日。

所以我们要做的,就是把第 7 位开始的 8 个字符抠出来,再让 Excel 认出这是个日期。

第一步:MID 提取原始数字

假设身份证号在 A2 单元格,在 B2 输入:=MID(A2,7,8)

MID 的三个参数分别是:从哪个单元格取、从第几位开始、取几位。这里就是从 A2 的第 7 位开始,连取 8 位。

回车后得到 19950816 这样的结果。注意,这时候它还是文本,不是真正的日期,没法参与年龄计算、也没法按生日排序。

第二步:TEXT 加分隔符变日期样式

想显示成 1995-08-16 这种带横线的样式,把公式升级一下:

=TEXT(MID(A2,7,8),"0000-00-00")

TEXT 函数负责把 8 位数字按"四位-两位-两位"的模板重新排版。到这一步,看起来已经像日期了。

💡 但它本质上还是文本。如果只是打印花名册,到这一步就够用了。

第三步:想真正当日期用,再套一层

如果后续要用生日算年龄、算工龄,或者按月份筛选谁这个月过生日,就需要把文本转成 Excel 认可的日期值:=--TEXT(MID(A2,7,8),"0000-00-00")

前面加两个减号,作用是把文本强制转成数值。回车后如果显示成 34927 这样的数字,别慌,这是日期的序列值。选中单元格,按 Ctrl+1 打开设置单元格格式,选"日期",就正常显示了。

最容易踩的三个坑

  1. 身份证列显示成科学计数法。录入身份证前要先把整列设成文本格式,否则后 3 位会变成 0,MID 取出来的也是错的。这种损坏是不可逆的,只能重新录入。
  2. 身份证号前后有空格。从系统导出的数据经常带看不见的空格,MID 就会取偏。可以先用 =TRIM(A2) 清理一遍,或者把公式写成 =MID(TRIM(A2),7,8)
  3. 表里混着 15 位老身份证。15 位号码的出生日期从第 7 位开始只有 6 位,且不含世纪。如果表里新旧混杂,用这个公式判断:=IF(LEN(A2)=18,TEXT(MID(A2,7,8),"0000-00-00"),TEXT("19"&MID(A2,7,6),"0000-00-00"))

顺手再算个年龄

生日提出来之后,年龄一个公式就出来了。假设 B2 是刚才转好的日期值:=DATEDIF(B2,TODAY(),"Y")

DATEDIF 计算两个日期之间的整年数,配合 TODAY 函数,表格每次打开都是最新年龄,不用手动更新。

⚠️ 公式写好后记得双击 B2 右下角的小方块,一键填充到整列,别一行行拖。

把这套公式存进自己的常用模板里,下次遇到几千行的花名册,也就是复制粘贴的功夫。