
EXCEL身份证号码计算出生年月年龄及性别和重名筛选.doc
4页EXCEL 身份证号码计算出生年月年龄及性别和重名筛选 在学校的人事管理中经常会遇到需要统计教职工的年龄的问题,但案头的原始资料只有身份证号码,其实这足够了在 EXCEL 中,引用其内置函数利用身份证号码达到此目的比较简单1、身份证号码简介(18 位):1~6 位为地区代码;7~10 位为出生年份;11~12 位为出生月份;13~14 位为出生日期;15~17 位为顺序号,并能够判断性别,奇数为男,偶数为男;第 18位为校验码2、确定“出生日期”:18 位身份证号码中的生日是从第 7 位开始至第 14 位结束提取出来后为了计算“年龄”应该将“年”“月”“日”数据中添加一个“/”或“-”分隔符①正确输入了身份证号码假设在 D2 单元格中)②将光标定位在“出生日期”单元格(E2)中,然后在单元格中输入函数公式“=MID(D2,7,4)&"-"&MID(D2,11,2)&"-"&MID(D2,13,2)”即可计算出“出生日期”关于这个函数公式的具体说明:MID 函数用于从数据中间提取字符,它的格式是:MID(text,starl_num,num_chars)Text 是指要提取字符的文本或单元格地址(上列公式中的 D2 单元格)。
starl_num 是指要提取的第一个字符的位置(上列公式中依次为 7、11、13)num_chars 指定要由 MID 所提取的字符个数(上述公式中,提取年份为 4,月份和日期为 2)多个函数中的“&”起到的作用是将提取出的“年”“月”“日”信息合并到一起,“/”或“-”分隔符则是在提取出的“年”“月”“日”数据之间添加的一个标记,这样的数据以后就可以作为日期类型进行年龄计算操作效果如下图:3、确定“年龄”:“出生日期”确定后,年龄则可以利用一个简单的函数公式计算出来了:将光标定位在“年龄”单元格中,然后在单元格中输入函数公式“=INT((TODAY()-E2)/365)”即可计算出“年龄”关于这个函数公式的具体说明:①TODAY 函数用于计算当前系统日期只要计算机的系统日期准确,就能立即计算出当前的日期,它无需参数操作格式是 TODAY()②用 TODAY()-E2,也就是用当前日期减去出生日期,就可以计算出这个人的出生天数③再除以 “365”减得到这个人的年龄④计算以后可能有多位小数,可以用【减少小数位数】按钮,将年龄的数值变成“整数”,也可在公式= (TODAY()-E2)/365 中再嵌套一个“INT”函数取整数,即“ =INT((TODAY()-E2)/365)”,这样就会自动将后面的小数去掉,只保留整数部分。
操作效果如下图:4、确定“性别”:每个人的性别可以利用“身份证号码”进行判断,18 位身份证号码中,第15~17 位为顺序号,奇数为男,偶数为女将光标定位在“性别”单元格中,然后在单元格中输入函数公式“=IF(VALUE(MID(D2,15,3))/2=INT(VALUE(MID(D2,15,3))/2),"女","男")”即可计算出“性别”关于这个函数公式的具体说明:①函数公式中,MID(D2,15,3)的含义是将身份证中的第 15~17 位提取出来②VALUE(MID(D2,15,3))的含义是将提取出来的文本数字转换成能够计算的数值③VALUE(MID(D2,15,3))/2=INT(VALUE(MID(D2,15,3))/2)的含义是判断奇偶INT”在上面说过是取整函数,如果是偶数,则前后相等;如果是奇数,则前后不相等)④=IF(VALUE(MID(D2,15,3))/2=INT(VALUE(MID(D2,15,3))/2),"女","男")的含义是若是“偶数”就填写“女”,若是“奇数”就填写“男”操作效果如下图:确定性别 =IF(VALUE(MID(E7,15,3))/2=INT(VALUE(MID(E7,15,3))/2),"女","男")确定出生日期 =MID(E7,7,4)&"-"&MID(E7,11,2)&"-"&MID(E7,13,2)确定年龄 =2010-IF(LEN(C3)=18,MID(C3,7,4),"19"&MID(C3,7,2))九九乘法表公式: =IF(B$1>$A2,"",B$1&"*"&$A2&"="&B$1*$A2)重名筛选 =countif(B:B,B2) 重 名 筛 选1、在表中插入一列“重名统计”,假设为 E 列。
2、在插入列(如 E2 单元格)输入“=COUNTIF(B:B,B2)”3、复制 E2 单元格公式到最后一行4、使用自动筛选,E 列值大于 1 的就是重名的了先按 b 列排序,在 b 列后插入一行在 c2 输入=if(b21,"重复","")或者设置条件格式=COUNTIF($A$1:$A$200,A1)>1点击“工具→宏→Visual Basic 编辑器”,进入 VBA 开发环境,点击“插入→模块”,这时出现代码窗口,在其中输入下列代码: Sub tmtx()Sheets("sheet2").[a1] = "身份证"Sheets("sheet2").[b1] = "姓名"a=sheets("sheet1").[a1].CurrentRegion.Rows.Count ‘判断学生名单的行数For i = 2 To ak = Sheets("sheet2").[a1].CurrentRegion.Rows.Count + 1If Application.WorksheetFunction.CountIf([c1:c65530], Cells(i, 3)) > 1 ThenSheets("sheet2").Cells(k, 2) = Sheets("sheet1").Cells(I, 3)Sheets("sheet2").Cells(k, 1) = Sheets("sheet1").Cells(I, 2)End If‘使用 CountIf()函数对每个名字进行判断,如果 CountIf()值大于 1,则将其复制到 Sheet2。
NextSheets("sheet2").[a1].CurrentRegion.Sort Key1:=Sheets("sheet2").[b1], Order1:=xlAscending, Header:=xlGuess‘对复制到 Sheet2 的内容以“姓名”作为关键字排序,从而实现同名同姓的姓名排在一起,以方便查阅If Sheets("sheet2").[a2] = "" ThenMsgBox“无同名同姓学生!”,“报告”End If‘如果没有同名同姓的,则跳出报告信息窗口Sheets("sheet2").SelectEnd sub。












