本教程已解决了上一课程留下来的疑问的第一点:
1.(已解决) 如上图用黄色背影标示的,部分会出现只打了一种类别的卡,例如说某人当天只打了2次卡,均为上班卡,只是前后时间不同。
如何通过公式限定,最早上班时间的选择只能规定在07:00-12:00,最晚打卡时间规定在12:00-24:00. 便于最后迟到早退的统计正确性。
2. (未解决)假如说公司存在多种上班时间的情况,如何设置?例如公司有几个班,正常班是9:00-17:00;三班倒是07:30-15:30;15:30-23:30;23:00-次日7:30.
1.教程里的是一行有几个数据,但如果导出数据还是像上节课程中,分几行显示,那就按以下步骤处理:
a)先统计该名员工当天共打卡次数,由于我导出的例子里最多1天打卡3次,因此辅助栏里只新建了三列“第N次刷卡”用于存放数据;
第几次打卡:=COUNTIFS(B2:$B$100,B2,D2:$D$100,D2) 其中,$B$100,D2:$D$100,是看数据最后行是几行(例子是100行)。
第一次刷卡:=if(f3=1,e3,"")
第二次刷卡:=if(f3=2,e3,"")
第三次刷卡:=if(f3=3,e3,"")
以此类推,第N次刷卡:=if(fN=N,e3,"")
b) 新建两栏用于将第2,3次打卡数据放回第一次刷卡所在行(最多刷卡次数N就要新建N-1列存放);
第二次刷卡1:=if(d2=d3,h3,"")
第三次刷卡1:=if(d2=d3,i4,"")
以此类推:第N次刷卡1:=if(d2=d3,第N次刷卡1所在列的字母N+1,"")
c) 删除原本的第一次刷卡,第二次刷卡,第N次刷卡,将新建的第一次刷卡1,第二次刷卡1,第N次刷卡1(同一行显示)的修改列名字,同时,通过筛选,将第一次刷卡为空白的行删去,即生成教程里刚开始的表格:
2. 新建一列星期,来显示日期是星期几,是否为工作日或休息日。公司的出勤是早晚8:00-17:00,8:05后为迟到,16:55前为早退。
星期:=WEEKDAY(D2,2)
早签到:=IF(AND(MIN(F2:H2)<12/24,MAX(F2:H2)<>""),MIN(F2:H2),"")
晚签到:=IF(AND(MAX(F2:H2)>12/24,MIN(F2:H2)<>0),MAX(F2:H2),"")
3. 统计迟到或早退次数:
迟到:=IF(OR(I2="",I2>8.083/24),1,"")
早退:=IF(OR(J2="",J2<16.916/24),1,"")