HR 表格优化 身份证号里的乾坤

​工作案例

HR 新人小宇,要将一批新入职员工的信息录入Excel【职工档案表】中。

勤奋的小宇拿起入职登记表就开始干活:

第1条,姓名、性别、手机、学历、身份证、出生年月、生日、年龄...约两分钟录完了第1条,检查一下有没有错误,好,继续...

第2条,姓名...

第3条...

...

十余条信息录完,半个小时过去了,小宇终于舒了一口气〜

案例讨论

打开小宇的这张表格:

表格比较简单,信息都是档案中最基础的。表格总共有16个字段(16列),和身份证相关的字段有4-5个。小宇非常认真负责地输入了每一行信息。

毋庸置疑,身份证号是档案必需的。

我们都知道身份证号中包括「出生日期」。

那么是不是可以从身份证号中提取职工的出生日期,而无需录入?

提取到出生日期,我们不就知道了「生日」?

「年龄」是唯一一个需要稍做计算的数值。

甚至我们还可以提取员工的「户籍地」!

也就是说,小宇只要输入一次身份证号,「出生年月」、「生日」、「年龄」「户籍地」就都有了,一下子可以节省4个字段的录入时间啊, 也就是光这一项就省下4/16=1/4的录入时间哦!!

小宇得知还有这波操作,笑的可开心了〜

优化实战

讨论出了优化思路,那就开始干吧:

从上面的分析过程我们能看出:

提取身份证号中的出生日期是非常关键的一步。「生日」和「年龄」的计算都依赖于这一步。

身份证号属于「文本字符串」,字符串长度18位,其中出生日期占8位,从身份证的第7位开始至第14位结束。

01 提取出生日期

从文本中截取一段特定长度的字符串所使用的最经典的函数是MID()。

MID()函数语法如下:

MID(text, start_num, num_chars)

text  包含要提取字符的字符串(或单元格)

start_num  文本中要提取的第一个字符的位置 

num_chars  希望从文本中返回字符的个数 

以本例第4行(第一位员工高圆圆)为例:

身份证号所在的列是 G 列,那么text = G4 ,

出生日期是从第 7 个字符开始,那么start_num = 7,

出生日期的字符长度是8位,那么num_chars = 8

「出生日期」位于 H 列,我们在 H4 单元格中直接输入:

=MID(G4,7,8)

回车,即可得到返回值“19980101”,这就是从身份证中提取的出年日期的字符了。

细心的同学会发现,我们得到的“19980101”与表格中“1998-01-01”长的不一样(格式不一致)。

是的,MID()函数返回的是一段纯文本,不带任何格式。要让他们长的一样(格式一致),我们需要进行一步“格式转换”。

这里我们使用文本格式函数TEXT(),你可以把它理解成一个格式化函数,几乎可以按需格式任何类型的数值。

TEXT() 函数语法如下:

TEXT(value, format_text)

value  要转换格式的数值

format_text  要转换的格式(文本)

在本例中,

我们要转换格式的文本是来自于MID()函数的返回值,

也就是说 value = MID(G4,7,8),

而要显示的样式是“年-月-日”,令 format_text = "0-00-00"(记住用法)

稍微修改一下H4单元格中的函数:

=TEXT(MID(G4,7,8),"0-00-00")

回车,即可得到“1998-01-01”我们常用的格式了。

至此,我们已经完成了最关键的一步。

02 提取生日

有了出生年月,就等于有了生日信息,

只是我们通常在说一个人的生日时不会涉及年份,

格式一般显示为“**月**日”。

也就是说,我们只需要提取月、日信息,显示为“**月**日”的样式即可。

月和日的长度一共是4位,从身份证的第11位开始。

我们直接复制 H4 单元格中的公式,粘贴至 J4 单元格中,做如下修改:

=TEXT(MID(G4,11,4),"00月00日")

回车后,即可得到“01月01日”样式的生日信息了。

03 计算年龄

年龄是本例中唯一需要计算的一步。档案中的年龄一般是指当前年份与出生年份的差,还要考虑当前的日期是在生日前还是在生日后,在生日前就要再减掉1岁。比如,1990年3月1日出生至2010年3月1日,是20周岁,但如果当前是2010年2月份,还未到3月1日,那么年龄就应该是19周岁而不是20周岁。

所以,在Excel中计算年龄时,一定是以当前日期为基准,计算 与出生日期的年份差。

我们可以使用日期函数DATEDIF()来实现年龄计算。

DATEDIF() 函数语法如下:

DATEDIF(Start_Date,End_Date,Unit)

Start_Date  代表时间段内的第一个日期或起始日期;

End_Date  代表时间段内的最后一个日期或结束日期;

Unit  所需信息的返回类型。

在本例中,

开始日期是身份证中的出生日期,即

Start_Date = TEXT(MID(G4,7,8),"0-00-00") 

结束日期就是当前日期,也就是系统当前日期,可以用函数TODAY()提取到,即

End_Date = TODAY()

而我们想要的是两个日期的间隔年数,在Excel中用字母“Y”来表示年份差,即

Unit = "Y"

我们在I4单元格中,输入完整的公式 

=DATEDIF(TEXT(MID(G4,7,8),"0-00-00"),TODAY(),"Y")

回车,即可得到职工高圆圆的年龄了。

04 提取户籍地

从身份证中提取户籍地,需要使用《全国行政区域身份证代码表》作为数据源,借助Excel的搜索查询函数来实现。受篇幅所限,这一功能的具体的实现方法我们将在单独的文章中介绍。

总  结

通过小宇的案例,我们学习到以下4个函数的用法:

TODAY( )  

 获取系统前日期

MID( 文本字符串,开始提取的位置, 

 要提取的字符数  )  

  从一段文本字符串中提取一部分字符

TEXT( 要格式化的数值, 格式化后的形式  )  

  格式化金额、日期、文本、数字

DATEDIF( 开始日期,结束日期,天/月/年  )  

 计算两个日期之间间隔的天数、月数或年数

为获取最佳体验,给亲们两点建议,请收下:

在函数参数中引用单元格时对「列」使用「绝对引用」,以防止在其他单元格中复制引用公式时出错。示例中为强调优化思路,所有引用都简单的使用了「相对引用」。

注意DATEDIF( )函数的异常处理。在「年龄」一列往下的空白单元格中填充该公式时,会出现“#VALUE”的错误,原因是当身份证所在的单元格为空时,第一个参数的值为空,导致该函数返回值错误。为避免该情况出现,应该在DATEDIF( )函数外面再嵌套IFERROR( )错误处理函数:

=IFERROR(DATEDIF(TEXT(MID(G4,7,8),"0-00-00"),TODAY(),"Y"),"") 。这时再往下填充公式就不会显示错误了。

精心为您准备了本文的「知识卡片」,长按图片保存至相册 OR 分享给朋友

(精雕细琢才敢呈现,感谢您的支持)〜

  觉得好看,请点这里↓↓↓    

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容