Excel精英培训网

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

[已解决]考勤表VBA计算,请教各位老师

[复制链接]
发表于 2015-4-15 16:29 | 显示全部楼层 |阅读模式
表中员工的打卡时间分布在不同的格子中需按样表统计,请帮忙,谢谢
最佳答案
2015-4-18 13:26
  1. Sub Macro1()
  2. Dim arr, brr, br, d, d2, i&, h&, s&
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. arr = Sheet3.Range("a1").CurrentRegion
  6. ReDim brr(1 To UBound(arr), 1 To 9)
  7. For i = 2 To UBound(arr)
  8.     x = Split(arr(i, 4))
  9.     d2(arr(i, 1)) = d2(arr(i, 1)) + 1
  10.     If Not d.exists(arr(i, 1)) Then
  11.         h = h + 1
  12.         d(arr(i, 1)) = h
  13.         brr(h, 1) = arr(i, 1)
  14.         brr(h, 2) = arr(i, 2)
  15.         brr(h, 3) = x(0)
  16.         brr(h, 4) = x(1)
  17.     Else
  18.         brr(d(arr(i, 1)), d2(arr(i, 1)) + 3) = x(1)
  19.     End If
  20. Next
  21. ReDim br(1 To h, 1 To 9)
  22. For i = 1 To h
  23.     For j = 1 To 4
  24.         br(i, j) = brr(i, j)
  25.     Next
  26.     s = 4
  27.     For j = 5 To 9
  28.         If brr(i, j) <> "" Then
  29.             If DateDiff("s", brr(i, j - 1), brr(i, j)) >= 1800 Then s = s + 1: br(i, s) = brr(i, j)
  30.         End If
  31.     Next
  32. Next
  33. Sheet2.Activate
  34. [a1:i1] = Array("工号", "姓名", "日期", "时间1", "时间2", "时间3", "时间4", "时间5", "时间6")
  35. Range("a2").Resize(h, 9) = br
  36. End Sub
复制代码

dfdff.rar

20.77 KB, 下载次数: 22

发表于 2015-4-16 11:10 | 显示全部楼层
QQ截图20150416110434.jpg QQ截图20150416110442.jpg

sheet1里,A:F是什么,I:L是什么?
sheet3里,A1:D19是什么,a26:i31是什么?


回复

使用道具 举报

 楼主| 发表于 2015-4-17 16:14 | 显示全部楼层
老师您好,SHEET1和SHEET2不用理会,是我忘删了,请只看SHEET3的内容,谢谢。
回复

使用道具 举报

 楼主| 发表于 2015-4-18 10:31 | 显示全部楼层
sheet3里,A1:D19是打卡记录,a26:i31是想要得到的结果?麻烦老师

回复

使用道具 举报

发表于 2015-4-18 10:53 | 显示全部楼层
  1. Sub Macro1()
  2. Dim arr, brr, d, d2, i&, h&
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. arr = Range("a1").CurrentRegion
  6. ReDim brr(1 To UBound(arr), 1 To 9)
  7. For i = 2 To UBound(arr)
  8.     x = Split(arr(i, 4))
  9.     d2(arr(i, 1)) = d2(arr(i, 1)) + 1
  10.     If Not d.exists(arr(i, 1)) Then
  11.         h = h + 1
  12.         d(arr(i, 1)) = h
  13.         brr(h, 1) = arr(i, 1)
  14.         brr(h, 2) = arr(i, 2)
  15.         brr(h, 3) = x(0)
  16.         brr(h, 4) = x(1)
  17.     Else
  18.         brr(d(arr(i, 1)), d2(arr(i, 1)) + 3) = x(1)
  19.     End If
  20. Next
  21. Range("a33").Resize(h, 9) = brr
  22. End Sub
复制代码
回复

使用道具 举报

发表于 2015-4-18 10:55 | 显示全部楼层
………………

dfdff.zip

40.83 KB, 下载次数: 32

回复

使用道具 举报

 楼主| 发表于 2015-4-18 11:12 | 显示全部楼层
谢谢老师,有一点我没讲清楚,运算结果的表需放在一个新SHEET中,且得到的时间至少相隔30分钟,再次麻烦了,谢谢
回复

使用道具 举报

发表于 2015-4-18 13:26 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim arr, brr, br, d, d2, i&, h&, s&
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. arr = Sheet3.Range("a1").CurrentRegion
  6. ReDim brr(1 To UBound(arr), 1 To 9)
  7. For i = 2 To UBound(arr)
  8.     x = Split(arr(i, 4))
  9.     d2(arr(i, 1)) = d2(arr(i, 1)) + 1
  10.     If Not d.exists(arr(i, 1)) Then
  11.         h = h + 1
  12.         d(arr(i, 1)) = h
  13.         brr(h, 1) = arr(i, 1)
  14.         brr(h, 2) = arr(i, 2)
  15.         brr(h, 3) = x(0)
  16.         brr(h, 4) = x(1)
  17.     Else
  18.         brr(d(arr(i, 1)), d2(arr(i, 1)) + 3) = x(1)
  19.     End If
  20. Next
  21. ReDim br(1 To h, 1 To 9)
  22. For i = 1 To h
  23.     For j = 1 To 4
  24.         br(i, j) = brr(i, j)
  25.     Next
  26.     s = 4
  27.     For j = 5 To 9
  28.         If brr(i, j) <> "" Then
  29.             If DateDiff("s", brr(i, j - 1), brr(i, j)) >= 1800 Then s = s + 1: br(i, s) = brr(i, j)
  30.         End If
  31.     Next
  32. Next
  33. Sheet2.Activate
  34. [a1:i1] = Array("工号", "姓名", "日期", "时间1", "时间2", "时间3", "时间4", "时间5", "时间6")
  35. Range("a2").Resize(h, 9) = br
  36. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-4-18 13:50 | 显示全部楼层
谢谢老师
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-17 02:31 , Processed in 0.417829 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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