ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > 函数与公式 > 如何根据考勤记录计算每个人每天在岗时长?

如何根据考勤记录计算每个人每天在岗时长?

作者:绿色风 分类: 时间:2022-08-17 浏览:210
楼主
gouweicao78
Q:如何根据考勤记录计算每个人每天在岗时长?如图,因为考勤有存在多刷、漏刷的现象,所以只计算当天最后一次和第一次刷卡的间隔时长。

 
A:操作步骤如下:
1、做数据透视表,求得每个日期、编号对应的最大、最小值

 
3、复制编号和日期另作新表,并删除重复项,然后运用GETPIVOTDATA函数取出透视表中的数据来参与计算:

 
如图,在C2单元格输入公式向下复制:
  1. =IFERROR(24/(1/SUM(GETPIVOTDATA(透视表!$A$3,"最"&{"大","小"}&"值项:打卡时间 "&A2&TEXT(B2," yyyy/m/d"))*{1,-1})),"漏打卡")


利用GETPIVOTDATA函数取得透视表数据中最大、最小打卡时间形成数组,并*{1,-1}再SUM求和进行相减,如果打卡只有1次或没打卡,这个差值为0,因此1/sum会返回#DIV/0!错误,所以用IFERROR函数将错误值返回为“漏打卡”,而能求出差值的,再用倒数的方法1/(1/sum)返回sum本来的值并*24得到以小时为单位的结果。


其中,GETPIVOTDATA函数使用了Excel 2000的语法,可参考下帖:
GETPIVOTDATA 函数用途及参数简述

(出处: Excel 技巧网)



透视表 函数计算考勤(含多打卡漏打卡).rar
2楼
gouweicao78
如果不做数据透视表,可以使用以下公式直接求:
  1. =IFERROR(24/(1/SUMPRODUCT({1,-1}*SUBTOTAL({4,5},OFFSET(源数据!C$1,MATCH(A2&B2,源数据!$A$2:$A$668&源数据!$B$2:$B$668,0),,COUNTIFS(源数据!A:A,A2,源数据!B:B,B2))))),"漏打卡")
3楼
HIMYM
学习了

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap