今天通过一个例题,给大家聊一下身份证的一些事儿。如下图所示,C列是身份证号码,现在需要从中获取性别、出生日期、年龄等信息;并判断身份证是否重复出现。
1,
常用函数解
2,
PowerQuery解
代码解析见注释,代码看不全可以左右拖动..▼
let源=Excel.CurrentWorkbook(){[Name="表1"]}[Content],性别=Table.AddColumn(源,"性别",eachif[数据]isnullthennullelseifNumber.IsOdd(Number.From(Text.Middle([数据],16,1)))then"男"else"女"),生日=Table.AddColumn(性别,"出生日期",eachDate.From(Text.Middle([数据],6,8)),typedate),年龄=Table.AddColumn(生日,"年龄",eachtry[a=DateTime.LocalNow(),b=Date.AddYears([出生日期],Byte.From(#date(Date.Year([出生日期]),Date.Month(a),Date.Day(a))<[出生日期])),c=Date.Year(a)-Date.Year(b)][c]otherwisenull),是否重复=Table.AddColumn(年龄,"是否重复",eachif[数据]isnullthennullelseifList.Count(List.Select(年龄[数据],(x)=>x=_[数据]))>1then"重复"elsenull)in是否重复
VBA解
SubbyVBA()DimaData,aRes,iAsLong,jAsLong,sAsStringDimdicAsObject,dteTempAsDateDimdteDataAsDate,yAsLong,mAsLong,dAsLongWorksheets("UI").SelectaData=Range("c2:c"&Cells(Rows.Count,"c").End(xlUp).Row)'数据源ReDimaRes(1ToUBound(aData),1To4)'结果数组dteData=Date'dteData是今天的日期y=Year(dteData):m=Month(dteData):d=Day(dteData)',y是年.m是月d是日Setdic=CreateObject("scripting.dictionary")'后期绑定字典OnErrorResumeNext'忽略错误继续运行Fori=1ToUBound(aData)s=aData(i,1)IfLen(s)=18ThenaRes(i,1)=IIf(Mid(s,17,1)Mod2=0,"女","男")'性别aRes(i,2)=CDate(Format(Mid(s,7,8),"0-00-00"))'生日dteTemp=DateSerial(Year(aRes(i,2)),m,d)'aRes(i,3)=y-Year(dteTemp)-IIf(dteTemp