1、条件较多,一般使用VBA比较好,直接用公式就写的太长了。下面把加班的单独计算,给你个思路=IF(INT((TIMEVALUE(RIGHT(C4,5))-TIME(17,25,0))/TIME(0,30,0))>0,INT((TIMEVALUE(RIGHT(C4,5))-TIME(17,25,0))/TIME(0,30,0))/2,0)
2、解释:Right函数截取单元格文本中的后面几个字符,这里截取最后的签退时间,TimeValue将文本转为时间序列,Time(小时,分钟,秒)返回时间序列,这里是17:25:00【因为加班时间是否大于25分钟,小于25分钟的会被忽略】,因为加班是按照半个小时最小单位计算的,所以差值除以30分钟;int取整(小数部分忽略)。判断比值是否大于0,小于0的可能是没有加班或加班时间不足25分钟,这时返回0,加班的情况返回加班小时数(0.5的倍数)。
3、正常考勤也可以类似处理,先从文本串中提取出时间,进行比较,但是条件较多,公式太长,并且有些情况你不规定好,也不好处理。比如只打了一次考勤,这是算半天还是算1天?如果是晚上只打了一次考勤,白天算不算上班?晚上算不算加班?