乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > Excel案例讲解-三种思路求解员工生日还有几天过-excel案例

Excel案例讲解-三种思路求解员工生日还有几天过-excel案例

作者:乔山办公网日期:

返回目录:excel表格制作

小陆从会议室出来,远远看见霉霉小度站着,比较好奇的就走了过去,原来是小皮在操作电脑,一边操作好像还在说这着什么,走近了才知道,原来小皮在用公式对快过生日的员工进行排序,因为我们公司会在员工过生日的时候,派发小礼物。表格的结构如下:

Excel案例讲解-三种思路求解员工生日还有几天过

公司员工信息表

小陆到的时候,小皮已经把出生年月提取完成了,小皮开始编写统计生日距离多少天的公式,=IF(DATE(YEAR(TODAY()),MONTH(C2),DAY(C2))<TODAY(),"生日已过",DATE(YEAR(TODAY()),MONTH(C2),DAY(C2))-TODAY());

小皮自带解说:做这个表的关键部分就是提取生日中的月日,然后生成今年年份的日期,再与今天的日期比较,大于今天的日期的就说明还么有过生日,就计算出结果,小于今天的日期的,就说明生日已经过了!

霉霉:这公式我明白,哪你怎么用ctrl+e提取的身份证中的出生年月日,怎么用了这个公式=DATE(MID(b2,7,4),MID(b2,11,2),MID(b2,13,2))提取呢?

小皮:今天就是觉得用的顺手,我的技巧多啊,我想用哪个哪就是信手拈来啊!

小度笑了,说:是不是你也发现ctrl+e技巧也存在一些问题啊,如果直接提取b2的生日直接输入1978/07/25,一回车就变成1978/7/25,然后ctrl+e发现有些生日提取的就不对了啊,若先字符串在ctrl+e,再转日期反而不如公式来的直接干脆,至于公式吗?还是挺大师怎么讲吧!

小皮故意提高嗓门说:mid函数是个文本函数,他是用来提取文本中的部分内容,共有三个参数,第1个就是需要提取内容文本结果的表达式或引用单元格,第2参数就是从什么位置开始截取,第3个就是提取字符的长度,我们知道,身份证中,出生年月的年份从7位开始共四个字符公式为=mid(b2,7,4),月份为11位2个字符=mid(b2,11,2),日期为=mid(b2,13,2),然后用date函数生成日期就好了。

Excel案例讲解-三种思路求解员工生日还有几天过

MID函数语法结构图

霉霉:哪哥儿,你为什么不直接生成今年的生日日期呢?还要判断时候再生成一次,这不繁琐吗?

小皮脸滕就红了:哦,我是为了核查万一出错了,好排查,不过你说的也挺对的啊,我帮你改一下啊!说这把公式改成了=date(year(today()),mid(b2,11,2),mid(b2,13,2)),后面的公式改为:=IF(C2<TODAY(),"生日已过",C2-TODAY());

小度也是一笑,还不忘挤兑一下说:看露怯了吧,还没有人家霉霉思路清楚呢?而且你的公式也不是最简的啊,还是我来演示一下,公式该怎么写吧!然后就把最后的公式改为:=iferror((c2>=today())*(c2-today()),"日期异常")

小皮:呵呵,不就将我的if改成数学乘法表达式了吗!有什么料不起的呢?还是换汤没有换药,还好意思说自己牛啊,有本事用自己思路来一个!

小度:这是让你知道,你的公式还可以更漂亮,可以更优雅,不知好人心,你不是想看我的思路,我就来一个,于是将最后一行的公式改为:=iferror((mod(c2,today())<365)*(mod(c2,today()),"日期异常")

霉霉:mod函数之前你好像用过,不过我师父说用在日期会有问题,你这次用的么有问题吗?

小度:上次是因为我日期直接当成数字来处理,才导致的进位出现的数字增加数倍,再取余数据不准的情况,这次不同,我们求的是天数,每个日期都对应一个天数,这些数字都是连续,并没有日期那样的规则,就没有问题。

霉霉:哥儿,哪你具体说一下你这个公式,我有点看不懂啊!

小度得意的说这要先说数学函数MOD,共2个必须输入的参数,第1是原数字,第2是函数说明中叫除数,我叫它取数范围,也就是函数返回的结果必定是0-第2参数-1范围内,要想取余法解决这个问题,我们需要知道2点,

1.若要数字重复出现,除非出现整数倍的关系才行,举个例子:比如mod(9,10)结果为9,如果想重复出现必须是mod(19,10)才行,

2.取余结果最大值出现在越接近第2参数的时候,比如mod(999,1000)=999.而过了1000反而会从小再递增。

Excel案例讲解-三种思路求解员工生日还有几天过

MOD函数语法结构图

我们知道这些后,我们所求的日期最大的差距也就365,假如今天的日期为2019年1月1日(对应数字为:43466),返回的结果范围0-364,已过生日的人取值范围为:43466,其他人的范围0-363,3号的时候,已过生日取值范围变为43466-43467,则其他人的范围为0-362,以此类推,到最后一天已过生日人范围43466-43829,其未过的为0。这样我们可以通过过滤掉>365的人,剩下的就是未过生日的人啦!

霉霉:听懂了点,如果我想统计30内过生日的人话,是不是将365,改成30就可以啦!

小度:厉害厉害,会举一反三啊!我这懂数学的,把公式编写成这样,还嫩吗?还有BUG吗?陆之涵!

霉霉一听小陆的名字,回头一看,高兴说:师傅,你刚才去哪啦?我没有找到你!

小陆:我被头儿叫去开会了,我先杀杀他的锐气,要不他不知道天高地厚啦!

他俩一口同声的说:你有多少斤两,别人不知道,我们可知道,有本事,别用我们的思路写,哪算你能耐。

霉霉抢声说:这种问题一共就那几种思路,还能有什么思路啊,你们难为人啊!

小度:o(︶︿︶)o 唉,还是人俩关系近,没有关系,只要陆之涵说:“我不行,我也没有招!”。

小陆:我还是那句话,数学用的好,得用对地方,今天还算及格,没有太明显的BUG,不过这点小事还难不到我,我用的就是别的方法,还不用if函数的那种,其实我用的方法,霉霉你应该能想到啊?

霉霉:是datedif函数吗?我也觉得合适,就是好像有部分内容会报错啊,我也正想问你来着,还有没有别的函数!

小陆:不用别的,就是datedif函数。陆之涵就把最后的公式改为=iferror(datedif(today(),c2,"d"),"生日已过"),然后回车。

霉霉:师傅,真棒,更他们求的结果一样啊,怎么报错也没有影响正常结果啊!

小陆:为什么报错啊,不就是因为第2参数的日期小于第1参数吗,不正式哪些已经过完生日的人吗?我们用iferror过滤掉不就行了吗?哪用什么取余法,比较大小啊?

小皮小度使个眼色说:我突然想起来,还有事要忙,就不打扰你们师徒聊天啦。

小度:o(︶︿︶)o 唉,差点忘了正事,走了走了!

霉霉正要说什么的时候,小陆拽了一下她的衣角,等他们走远了,说:其实方法没有好坏,他们的方法也挺值得学习的,以后你也多向他们请教,你才能学到更多东西!

霉霉:嗯嗯,师傅,今天挺有收获的,原来错误值也能这么用啊,我还是第一次见。

小陆:在学的函数的时候,不要忽略错误值,因为有了这些错误值,我们才能更好的驾驭这些函数!好了,你整理一下发文件吧,我去完成任务啦!

新一轮的技术竞技就这样拉下帷幕,生活还在继续,今后又会怎么样呢?我们一起期待吧!

本故事纯属虚构,如有雷同纯属巧合,

演员/角色:陆之涵/小陆,郭知霉 /霉霉 姜度华/小度 陈晓皮/小皮

Excel案例讲解-三种思路求解员工生日还有几天过

员工生日到期提醒效果图

我是爱讲故事的我爱极客达人-小哥聊经验,喜欢我的故事关注吧,带你从另一角度了解学习Excel知识技巧。

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网