霉霉急火来找到小陆:师傅,又遇到难题了,我的工作怎么就这么不顺啊,一步一坎啊,今天主管让我弄工资计算系统的中的计算工作日,满足两部分的需求,1:计算当月的工作日,2,计算一段时间的工作日,通常为一个月内容用于计算离职的员工工资使用,现在头都大了,我是一点思路都没有啊?
小陆:遇事不要慌,慌解决不了的任何问题,我们就先来思考一下前第1个问题吧,哪如果你不用电脑的话,你会怎么解决这两个问题呢?
霉霉:哪就简单多了,我拿着日期看一下,一加就行了!
小陆:怎么加?
霉霉:我可以直接数啊,把不是休息日的日期加起来就行啦,多简单啊?
小陆:这样想也对,不过如果告诉你一个有几个休息日或节假日,让你算工作日怎么算呢?
霉霉:哪也简单,看看这个月多少天,然后减去休息日或节假日总数就行了啊!
小陆:没有错,其实我们用软件做的就是把我们的思路转化成一个一个公式或数学表达!你有没有发现,你说解决方法中核心的只有两点,公式求月份天数和这个月的休息日的总数对吧?
霉霉:是啊,我好想明白一点,是不是用我们之前做的节假日的表来求啊,用contifs统计一下总天数,用总天数一减就成了,可总天数的怎么求啊?
小陆:不复杂,需要两个函数配合,一个函数就是eomonth函数,这个函数有两个必填参数,start_date(开始日期),months(相隔月数),功能是求出与开始日期相隔几个月后的月末日期,比如eomonth(2019/2/1,3) = 2019/5/31;然后再用day(eomonth(2019/2/1,3))这样就能求出5月份的天数了,哪你知道怎么求当月的天数吗?
EOMONTH函数语法结构图
霉霉:参数的数字有什么限制吗?可以为0吗?可以小于0吗?
小陆:可以啊,不过小于0就是开始日期往前几个的月的月末日期
霉霉:哪我知道了,当月的天数是不是就是=day(eomonth(today(),0) 或=day(eomonth(now(),0)。
小陆:聪明,哪你知道怎么求节假日的总天数吗?
霉霉:节假日的表在workdate里A列,所以公式是不是这样写=COUNTIFS(workdate!A:A,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),workdate!A:A,"<="&EOMONTH(TODAY(),0))
countifs函数使用语法结构示意图
突然有人说:这么复杂,让我来给你展示一下操作什么叫秒操作吧!这人正是小皮,他拉开霉霉,上手就开始操作:选中的workdate的A列数据,然后点击【插入】下的插入数据透视表,在workdate表中选择任意空单元格,然后点确定,右侧出现“数据透视表字段”然后进行下列操作:
数据透视表创建的具体操作步骤
操作完成后,只需在引用单元格输入=VLOOKUP(MONTH(TODAY())&"月",workdate!R:S,2,0),是不是就很简单呢?
小陆:没有想到你操作这么流畅,还这么快,霉霉,以后你一定要跟陈晓皮多多学习一下操作技巧啊!
霉霉:可是…
小陆:霉霉现在你这块挺欠缺的,以后有什么问题,要第一个请教小皮哥啊!
小皮:不用客气,有什么事,以后尽管来找我,我一定帮到底,现在我还有点工作要忙,先走啦!小皮刚走,霉霉迫不及待的说:可是他的快捷操作并不能解决第二个问题啊?
小陆:他是不能解决你的第二个问题,但他的做法也有他的优势,像这种数据变动不大,汇总花的时间可以忽略不计的时候,我们应该在做workdate的时候,就应该先吧数据汇总一下,这样的对于以后的使用还是很方便的,至于第二个问题,就直接用公式法就好了,哪公式怎么写呢?
霉霉:通常离职话的,只需结束的日期变成离职日期就好了,比如2019/8/19离职,公式为=today(2019/8/19)- COUNTIFS(workdate!A:A,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),workdate!A:A,"<="&2019/8/19)就好了,求工作日来说哪那种方法更好呢?我觉得还是第一种公式法好啊,它的可使用的地方多!
小陆:其实方法没有好坏,适合方好,在没有规定你必须使用某个方法的情况下,什么效率高就用什么!你把刚才的想法整理一下,重新做一遍,发给你们主管吧!
霉霉:好的师傅,什么你来我家给我补课啊?
小陆:这次你去我家……(本文完)
本故事纯属虚构,如有雷同纯属巧合!
演员/角色:陆之涵/小陆,郭知霉 /霉霉 姜度华/小度 陈晓皮/小皮