ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 EH云课堂直播课程免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 289|回复: 7

[求助] 关于考勤统计的问题vba

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-2-12 18:30 | 显示全部楼层 |阅读模式
规则:上班时间8点45之前打卡
下班17:00 之后打卡
找出异常的记录
1、迟到早退的打卡记录
2、当天早上或下班没有打卡的记录
异常记录提取出来放在一个新表里
谢谢各位帮忙。

例子.rar

8.52 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2019-2-12 18:41 | 显示全部楼层
先判断姓名,再判断日期,接着判断时间,最后输出结果。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-13 11:18 | 显示全部楼层
本帖最后由 ccsc006 于 2019-2-13 11:21 编辑

迟到早退问题可以判断出来了。
现在的问题是如何判断漏打卡。我建立了个数组比如叫aa1 ,如果数组的值有1和4就说明没有漏打卡,否则要标记出来。
请教各位,如何做个循环判断出这个数组没有1或4呢。谢谢啦

1good考勤分析.rar

44.5 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2019-2-13 13:04 | 显示全部楼层
1.gif


例子.rar (17.36 KB, 下载次数: 1)

TA的精华主题

TA的得分主题

发表于 2019-2-13 13:05 | 显示全部楼层
代码审核中,先传个附件

如果符合你的要求,按我签名档下载两个控件,因为用到了内存数据库 sqlite

1.gif

例子.rar (17.36 KB, 下载次数: 3)

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-13 14:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-2-13 15:22 | 显示全部楼层
本帖最后由 mzbao 于 2019-2-13 15:25 编辑
  1. Sub test()
  2.     Dim d, arr(), temp, temp1, tempArr(), brr(), i%, j%, sName$, dDate As Date
  3.    
  4. '    On Error Resume Next
  5.     With ThisWorkbook.Worksheets("考勤")
  6.         arr = .Range("A13:B" & .Cells(Rows.Count, 1).End(xlUp).row).Value
  7.     End With
  8.    
  9.     Set d = CreateObject("Scripting.Dictionary")
  10.     For i = 1 To UBound(arr)
  11.         sName = arr(i, 1)
  12.         dDate = DateValue(arr(i, 2))
  13.         If TimeValue(arr(i, 2)) < #2:00:00 AM# Then dDate = dDate - 1
  14.         d(sName & "@" & dDate) = d(sName & "@" & dDate) & "," & arr(i, 2)
  15.     Next
  16.     If d.Count = 0 Then Exit Sub
  17.     temp = d.keys
  18. '    Debug.Print d.Count, UBound(temp)
  19.     ReDim tempArr(1 To d.Count, 1 To 10)
  20.     For i = 0 To UBound(temp)
  21.         tempArr(i + 1, 1) = temp(i)
  22.         temp1 = Split(d(temp(i)), ",")
  23.         For j = 1 To UBound(temp1)
  24.             tempArr(i + 1, j + 1) = temp1(j)
  25.         Next
  26.     Next
  27.    
  28.     Dim rArr(), k%, txt$, n%, nTxt$
  29.     ReDim rArr(1 To 1)
  30.     For i = 1 To UBound(tempArr)
  31.         txt = "": nTxt = ""
  32.         For j = 2 To UBound(tempArr, 2)
  33.             If tempArr(i, j) = 0 Then Exit For
  34.             n = sd(TimeValue(tempArr(i, j)))
  35.             nTxt = nTxt & "," & n
  36.             If n = 2 Then txt = txt & "," & "迟到[" & TimeValue(tempArr(i, j)) & "]"
  37.             If n = 3 Then txt = txt & "," & "早退[" & TimeValue(tempArr(i, j)) & "]"
  38.         Next j
  39.         If InStr(nTxt, 2) = 0 And InStr(nTxt, 1) = 0 Then txt = txt & "," & "上班未打卡"
  40.         If InStr(nTxt, 3) = 0 And InStr(nTxt, 4) = 0 Then txt = txt & "," & "下班未打卡"
  41.         
  42.         If Len(txt) Then
  43.             k = k + 1
  44.             ReDim Preserve rArr(1 To k)
  45.             rArr(k) = tempArr(i, 1) & txt
  46.         End If
  47.     Next i
  48.     ThisWorkbook.Worksheets("Sheet1").Range("A2").Resize(k) = Application.Transpose(rArr)
  49. End Sub

  50. Function sd(sj As Date)
  51.     Select Case sj
  52.         Case #12:00:00 AM# To #2:00:00 AM#
  53.             sd = 4
  54.         Case #2:01:00 AM# To #8:45:00 AM#
  55.             sd = 1
  56.         Case #8:45:01 AM# To #11:59:59 AM#
  57.             sd = 2
  58.         Case #12:00:00 PM# To #4:59:59 PM#
  59.             sd = 3
  60.         Case #5:00:00 PM# To #11:59:59 PM#
  61.             sd = 4
  62.     End Select
  63. End Function
复制代码

1good考勤分析.rar

55.75 KB, 下载次数: 8

评分

参与人数 1鲜花 +1 收起 理由
ccsc006 + 1 优秀作品

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-2-13 15:51 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

关注官方微信,每天学会一个新技能

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2019-10-24 02:22 , Processed in 1.097395 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

沪公网安备 31011702000001号 沪ICP备11019229号

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师

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