Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6116|回复: 16

[已解决]考勤表旷工、迟到的统计

[复制链接]
发表于 2014-5-21 16:54 | 显示全部楼层 |阅读模式
本帖最后由 sophia_gwj 于 2014-5-21 17:02 编辑

求各位大神帮帮忙,按照附件的表,求一下几个
1、名字相同,当打卡时间1、打卡时间2都为空,算旷工,统计旷工天数(排除周六和周日)
2、参照时间段1、时间段2,按照打卡时间1、打卡时间2分别统计迟到、早退次数。在 打卡时间1、打卡时间2 里,“       -12:40:07”,类似这种,只有一半时间的,均算做迟到或早退。

因为单位人数太多,附件的表是我根据这个表列举的两个人,麻烦给个公式,后面的人我自己对着公式拉。谢谢了!!

门禁卡数据(测试).rar (6.68 KB, 下载次数: 39)
 楼主| 发表于 2014-5-21 17:12 | 显示全部楼层
回复

使用道具 举报

发表于 2014-5-21 21:56 | 显示全部楼层
回复

使用道具 举报

发表于 2014-5-22 14:36 | 显示全部楼层
  1. Sub tt()
  2.     arr = Sheet1.[a1].CurrentRegion
  3.     Set d = CreateObject("scripting.dictionary")
  4.     ReDim brr(1 To UBound(arr), 1 To 4)
  5.     For i = 2 To UBound(arr)
  6.         xm = arr(i, 3)   '姓名
  7.         If Not d.exists(xm) Then
  8.             n = n + 1
  9.             d(xm) = n
  10.             brr(n, 1) = xm
  11.         End If
  12.         p = d(xm)   '得到各名字在显示数组中对应行
  13.         
  14.         If Len(arr(i, 10)) = 0 Then arr(i, 10) = arr(i - 1, 10)
  15.         t1 = arr(i, 10)    '时间段1
  16.         If Len(arr(i, 11)) = 0 Then arr(i, 11) = arr(i - 1, 11)
  17.         t2 = arr(i, 11)    '时间段2
  18.         t11 = TimeValue(Split(t1, "-")(0)): t12 = TimeValue(Split(t1, "-")(1))   '时间段1左,时间段1右
  19.         t21 = TimeValue(Split(t2, "-")(0)): t22 = TimeValue(Split(t2, "-")(1))   '时间段2左,时间段2右
  20.         k1 = arr(i, 16): k2 = arr(i, 17)   '打卡时间1,打卡时间2
  21.         
  22.         If arr(i, 9) <> "星期六" And arr(i, 9) <> "星期日" Then
  23.             If Len(k1) = 0 And Len(k2) = 0 Then
  24.                 brr(p, 2) = brr(p, 2) + 1    '打卡1 打卡2均为空,则旷工+1
  25.             Else
  26.                 If InStr(k1, "-") > 0 Then
  27.                     xrr = Split(k1, "-"): k11 = Trim(xrr(0)): k12 = Trim(xrr(1))
  28.                     If Len(k11) > 0 Then   '打卡1左>时间段1左,或打卡1左为空,则迟到+1
  29.                         If TimeValue(k11) > t11 Then brr(p, 3) = brr(p, 3) + 1
  30.                     Else
  31.                         brr(p, 3) = brr(p, 3) + 1
  32.                     End If
  33.                     If Len(k12) > 0 Then  '打卡1右<时间段1右,或打卡1右为空,则早退+1
  34.                         If TimeValue(k12) < t12 Then brr(p, 4) = brr(p, 4) + 1
  35.                     Else
  36.                         brr(p, 4) = brr(p, 4) + 1
  37.                     End If
  38.                 End If
  39.                
  40.                 If InStr(k2, "-") > 0 Then
  41.                     xrr = Split(k2, "-"): k21 = Trim(xrr(0)): k22 = Trim(xrr(1))
  42.                     If Len(k21) > 0 Then   '打卡2左>时间段2左,或打卡2左为空,则迟到+1
  43.                         If TimeValue(k21) > t21 Then brr(p, 3) = brr(p, 3) + 1
  44.                     Else
  45.                         brr(p, 3) = brr(p, 3) + 1
  46.                     End If
  47.                     If Len(k22) > 0 Then  '打卡1右<时间段2右,或打卡2右为空,则早退+1
  48.                         If TimeValue(k22) < t22 Then brr(p, 4) = brr(p, 4) + 1
  49.                     Else
  50.                         brr(p, 4) = brr(p, 4) + 1
  51.                     End If
  52.                 End If
  53.             End If
  54.         End If
  55.     Next
  56.     With Sheet2
  57.         .Activate
  58.         .UsedRange.ClearContents
  59.         .[a1].Resize(1, 4) = Array("姓名", "旷工次数", "迟到次数", "早退次数")
  60.         .[a2].Resize(n, 4) = brr
  61.     End With
  62. End Sub
复制代码
回复

使用道具 举报

发表于 2014-5-22 14:36 | 显示全部楼层
请看附件。不知道对不对哦。

门禁卡数据(测试).rar

15.28 KB, 下载次数: 29

回复

使用道具 举报

 楼主| 发表于 2014-5-22 15:21 | 显示全部楼层
grf1973 发表于 2014-5-22 14:36
请看附件。不知道对不对哦。

太太 太 太 太 谢谢了,那可以把迟到和旷工的在表1中,用某个颜色突出显示一下吗??
回复

使用道具 举报

 楼主| 发表于 2014-5-22 15:27 | 显示全部楼层
grf1973 发表于 2014-5-22 14:36
请看附件。不知道对不对哦。

另外旷工是对的,但是迟到和早退貌似数据不对么
回复

使用道具 举报

发表于 2014-5-22 16:08 | 显示全部楼层
是不是前面时间段1,时间段2为空的部分不要判断的?颜色加了一下,旷工用黄色表示,迟到用红色,早退用绿色。但如果一次打卡中既迟到,又早退,只能显示早退的绿色。
另外在19、20、21列分别列出本日迟到、早退、旷工的次数,可以对一下,也方便找出问题。

门禁卡数据(测试).rar

15.68 KB, 下载次数: 21

回复

使用道具 举报

 楼主| 发表于 2014-5-22 17:06 | 显示全部楼层
grf1973 发表于 2014-5-22 16:08
是不是前面时间段1,时间段2为空的部分不要判断的?颜色加了一下,旷工用黄色表示,迟到用红色,早退用绿色 ...

谢谢谢谢!!
表做的太漂亮了,但是里面数据不是很准确呢,
比如下面这个图,就没有查出来是早退呢
1.jpg
回复

使用道具 举报

发表于 2014-5-23 09:01 | 显示全部楼层
图片显示不是查出来了吗?右边两个1表示迟到1次,早退1次。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 10:41 , Processed in 0.397640 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表