餐补计算
本篇适配:小白慎点。主要是思路分享。
上图餐补计算方式,一般有两种:
①根据打卡时间,计算实际餐补数据;
②根据排班数据,匹配理论餐补数据。
实际工作中,需综合比对两种数据,最后修正得到结果。
壹·思路分析
1. 严谨思路探讨
根据排班匹配餐补,可以用vlookup函数匹配。(需要处理一下数据***。)
根据打卡计算餐补,比较复杂。难点在于班次的判断。这里首先想到两种判断思路:
思路a
一种思路是,拿上班点、下班点与班次比对,正常情况下,取班点最接近的班次。可能用到绝对值函数ABS。
思路b
另一种思路如上图,计算班点重合区域,取重合区域最大的班次。本思路更为严谨、合理,计算公式:
MIN(B,b)-MAX(A,a)
然而,实际写公式时,我发现该思路下,公式特别复杂,特别长,不利于理解阅读。也就不利于后期维护,需尽量避免。
2. 有没有简单的思路?
我们先只考虑单个班次情况,比如夜班23:00-08:00。要怎样才能准确判断:这个打卡时间,是不是夜班?
最简单的方法,看下班时间,只要下班点在早上,基本就是夜班了。当然这并不准确,也有可能是晚班忘记打卡,次日补上。要进一步确定,还需看上班点,在深夜就妥了。这也是我们人脑的判断思路。
综上,有:上下班点→班次。
这里,我采用了一个取巧思路:截取上班点两位数,连接下班点两位数,组成一个班点4位数,如上图中的红色1300。然后考虑正常的迟到早退现象,排列组合每一个班次的班点4位数。
比对班点4位数,即可匹配出班次。有点像穷举法。
貳·公式设置
C8公式:
=LEFT(C3,2)&MID(C3,9,2),向右向下填充。
注:MID参数9,因有2个空格+1个换行符。
C13公式:
=IFS(C3="","没有打卡",LEN(C3)=7,"忘记打卡",1,"OK"),向右向下填充。
注:首先剔除无打卡、忘打卡的情况。
C3数组公式:
=B3:B5&C2:E2,三键结束输入,向右向下填充。
注:快速排列组合出每个班次的班点4位数。考虑到晚班1、2餐补相同,可将二者组合放在一起,即图中F列(删重)。
C18数组公式:
=OR(C8=排列组合!$F$1:$F$14)*10,三键结束输入,向右向下填充。
注:与F列比对,若相等,则判断班次为晚班(若无特殊说明,晚班=晚班1或晚班2,下同),最后输出结果:试用期的晚班餐补。
C23数组公式:
=OR(C8=排列组合!$C$15:$E$17)*20,三键结束输入,向右向下填充。
注:判断夜班,输出试用期夜班餐补。
C28公式:
=IF(LEN(C13)=4,C13,MAX(C18,C23)),向右向下填充。
注:合并打卡判断,晚班1、2判断(试用)和夜班判断(试用)。
B33公式:
=VLOOKUP(--A33,必要数据!$B$17:$C$18,2,0),向右向下填充。
注:两个负号"- -",将工号转换为数值,避免匹配格式问题。
C33公式:
=IFS(NOT(ISNUMBER(C28)),C28,C28=0,0,$B33="试用",C28,($B33="正式")*(C28=10),C28+15,($B33="正式")*(C28=20),C28+25),向右向下填充。
注:公式虽长,却也简单。核心思路是,"正式"且"10"的+15,"正式"且"20"的+25,其余不变。
叁·匹配公式
C40公式:
=IFERROR(VLOOKUP($B38&C38,必要数据!$A$21:$B$26,2,0),0),向右向下填充。
注:巧用符号&,将多条件匹配转换为单条件匹配。
注:数据处理***,将二维数据,转换为一维,以便匹配。
肆·总结
班次匹配思路:
将上下班时间简化为班点4位数,然后穷举各班次的班点4位数;通过班点4位数,可较快较准的匹配班次。
排列组合时,有可能不同班次,会有相同的班点4位数,需特别注意,设置优先级。
该思路餐补,应与排班计算餐补对比,以便处理少数特殊情况。
思路仅供参考,公众号回复"餐补",可获取本文。
作者:闲钓宇哥
网友评论