您现在的位置是:首页 > 新闻 > 正文
车间生产记录表格模板(怎样将打卡记录生成考勤表)
2022-09-15 04:16新闻
简介 现在市面上有很多考勤机,大部分都很智能化,导出的打卡记录表格规范易于整理。但总是有着一些奇葩的考勤机让统计工作变得极为复杂。 (因为无法上传附件,代码贴在文章最后,...
现在市面上有很多考勤机,大部分都很智能化,导出的打卡记录表格规范易于整理。但总是有着一些奇葩的考勤机让统计工作变得极为复杂。
(因为无法上传附件,代码贴在文章最后,有需求的可以根据自己实际需要改的。如果不懂vba可能理解有难度)
如图
这类考勤虽然看起来很直观,但是实际统计考勤数据时候就变得很棘手了。
遇到这类请款应该怎么办呢,首先要考虑的是考勤机是否能自己调整格式,这个步骤是不能缺省,如果考勤机有相应的功能我们只需按照说明自动调整就好。否则吭哧吭哧做完后发现原来系统自带模板,想死的心都有。
如果考勤机没有相应功能,那么就该考虑如何把图中的数据变成一维表格。变成一维表格是因为,一维表格可以通过数据透视表灵活调整。
如何变为一维表格呢,考勤数据量大且该表格结构复杂,很显然公式是很难做到的。(即使能用公式做,但由于打卡记录数据量都不小,做出来也会奇卡无比)PQ和vba成为首选工具,由于我个人PQ水平一般,就选择用vba处理以上数据。
具体思路:
- 判断单元格是否存在打卡记录(InStr(arr(i + k, x), "") > 0 Then联合判断如果存在,就记录到数组brr中,没有则退出循环。打卡次数是不固定的,所以这里用data_num这个变量,初始值我给了10,即是如果一人一天打卡在10次以内都会记录下。data_num可以根据个人需要更改,建议设置大些,不然可能存在有的打卡纪律未记录的情况。
最后整理数据格式如下:
单击按钮
源代码:
Sub Data_Clean()
Dim arr, brr(), i As Long, Lrow As Long, iyear As Integer, imonth As Integer
Dim sht As Worksheet
Application.DisplayAlerts = False
Application.ScreenUpdating = False
'删除‘员工刷卡记录表’以外的工作表
For Each sht In Worksheets
If sht.Name <> "员工刷卡记录表" Then
sht.Delete
End If
Next sht
With Worksheets("员工刷卡记录表")
Lrow = .Cells(Rows.Count, "B").End(3).Row + 1
arr = .Range("B5 brr(1, 2) = "姓名" brr(1, 4) = "日期"") > 0 Then
If arr(i - 1, 1) = 1 Then 'arr(i - 1, 1) = 1 且InStr(arr(i, 1), "") > 0 Then
temp = Split(arr(i + 1, x), Chr(10))
For j = 0 To UBound(temp)
If Trim(temp(j)) <> "" Then '如果不为空则记录
brr(n, 1) = brr(n - 1, 1) '工号
brr(n, 2) = brr(n - 1, 2) '姓名
brr(n, 3) = brr(n - 1, 3) '部门
brr(n, 4) = brr(n - 1, 4) '日期
brr(n, 5) = temp(j)
n = n + 1
End If
Next j
Else
Exit For '不存在打卡记录退出循环
End If
Next k
Next x
End If
End If
Next i
'创建工作表,将打卡记录保存在“考勤数据”这个工作表中
Set sht = Worksheets.Add(after:=Worksheets(Worksheets.Count))
With sht
.Name = "考勤数据"
.Cells.Clear
.Range("a1").Resize(n, 5) = brr
.Activate
.Range("a1").Resize(n, 5).Borders.LineStyle = xlContinuous
MsgBox "完成"
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub