用Excel函数实现年龄数据动态更新
目前在很多人员信息库中,年龄数据往往只是简单地用当年年份与人员出生年份的差来表示,这样使得人员年龄的变化等同于自然年度的变化。当每年1月1日自然年度加“1”的时候,所有人员的年龄也同时增加1岁。很显然,这种计算年龄的方法是不精确的。那么,能否到一种快速高效的方法获得准确的年龄信息呢?Excel函数为我们提供了解决方案。
获取以日期格式存储的出生日期
如日期输入时已选择日期格式,则该步骤可跳过。
Excel将日期存储为可用于计算的序列号(默认情况下,1900 年 1 月 1 日的序列号是 1 而 2008 年 1 月 1 日的序列号是 39448,这是因为它距 1900 年 1 月 1 日有 39448 天)。也就是说,当字符串为日期格式时,Excel才可将日期转换成序列号再进行相应计算。因此,要分析处理日期值,首先要将表示出生日期的字符串转换为日期格式。主要有以下几种情形:
(1)对于以“yyyymmdd”方法表示的出生日期,如“19500712”,可使用date函数进行转换。
在这里,我们假定出生日期(常规格式)保存在B列,出生日期(日期格式)保存在C列中(如图1所示),在C2单元格中输入公式:
图1 =DATE(LEFT(B2,4),MID(B2,5,2),RIGHT(B2,2))
含义为取B2单元格内字符串的前4位(LEFT(B2,4))、5至6位(MID(B2,5,2))、后2位(RIGHT(B2,2)),并以日期的格式显示出来。
(2)对于以“年·月·日”的方法表示的出生日期,如“1950.7.7”,可使用substitute函数,将文本字符串中的“.”替换为“-”,而Excel 会将具有 yyyy-mm-dd 格式的文本看作日期。如图2所示,在C2单元格输入公式:=SUBSTITUTE(B2,".","-"),即可完成转换。
图2 (3)利用身份证号码提取出生日期。如图3所示,在C2单元格输入公式:
图3 =IF(LEN(B2)=15,DATE(MID(B2,7,2),MID(B2,9,2),MID(B2,11,2)),DATE(MID(B2,7,4),MID(B2,11,2),MID(B2,13,2)))
含义为:如果(IF)身份证号码是15位(LEN(B2)=15),则取其7至8位(MID(B2,7,2))、9至10位(MID(B2,9,2))、11至12位(MID(B2,11,2)),并以日期的格式显示出来;反之(即身份证号码为18位),取其7至10位(MID(B2,7,4))、11至12位(MID(B2,11,2))、13至14位(MID(B2,13,2)),再以日期的格式显示出来。
获取年龄信息
方法一 使用DATEDIF函数。如图4,在D2单元格内输入公式=DATEDIF(C2,today(),"y"),即可直接获得年龄信息。
图4 公式含义为计算出生日期(C2)与当前日期(today())相差的周年数("y")。需要注意的是,直接使用DATEDIF函数获得的年龄信息与法律定义的“周岁”有一点差别,即后者所指的“每满1周岁”从生日第2天起计算,而前者是从生日当天算起,为此,我们可以将原公式
进一步修改为:
=DATEDIF(C2,TODAY(),"Y")+IF(DATEDIF(C2,NOW(),"YD")=0,-1,0)
含义为:首先计算出出生日期与当前日期相差的周年数,判断当两日期相差的天数("YD",忽略日期中的年份)为0时,将两日期相差周年数减1,否则不作修改。
方法二 在出生日期后插入“当年生日”一列,首先计算出生年份与当前年份之差,然后判断用当前日期减当年生日得到两日期相差的天数大于0时,年龄信息为两年份的差,否则在两年份之差的基础上减1。如图5。
图5 在D2单元格输入公式:=DATE(YEAR(TODAY()),MONTH(C2),DAY(C2)) ,得到当年生日;
在E2单元格输入公式:=YEAR(TODAY())-YEAR(C2)+IF(TODAY()-D20,0,-1) 得到年龄信息。
最后,将本方案中的公式用填充柄的方式复制到整列,即可获得所有人员的年龄信息。
mid函数提取年月日 总结:由于上述方案所用函数与计算机系统日期链接,使得人员年龄信息随系统日期的变化而不断判断是否进行更新,因此可以说,该方案帮助我们达到了以下目标:第一,实现年龄信息的静态准确输出;第二,实现年龄信息的动态实时更新。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论