|
添加一张表,把不规则的转换,一人一条记录。
规则了,后面应该要好处理多了!
公司电脑有加密,发图
代码
Sub 考勤数据处理()
' 问题与数据来源:https://club.excelhome.net/thread-1438973-1-1.html
' Sheet1 为 得力考勤机数据,由于每个人的打卡次数不一,且导出时是按每二次一个单元格,造成了每人占用的行数不一
' 思路:1、把同一人、同一天的多个打卡,合并到同一个单元格中;2、取一天最小和最大二个时间;3、计算出勤的时间;
Sheet2.UsedRange.ClearContents
usedrow = Sheet1.UsedRange.Rows.Count ' 获得考勤打卡表的结束行号
x2 = 1
For x1 = 5 To usedrow
If Sheet1.Cells(x1, 11).Value = "姓名:" Then
x2 = x2 + 1 ' 控制表2的写入位置
Sheet2.Cells(x2, 1).Value = Sheet1.Cells(x1, 19).Value
Sheet2.Cells(x2, 2).Value = Sheet1.Cells(x1, 4).Value
Sheet2.Cells(x2, 3).Value = Sheet1.Cells(x1, 12).Value
' 完成部门、工号、姓名的写入
kz = 0 ' 为了避开表1姓名的下一行是日期行
Else
If kz = 0 Then
kz = x1 ' 到达日期一行时,只做一件事,就改变KZ的值,以达到控制的目的
Else
For y = 2 To 32
If Len(Sheet2.Cells(x2, y + 2).Value) = 0 Then
Sheet2.Cells(x2, y + 2).Value = Sheet1.Cells(x1, y).Value ' 如果表2单元格为空,直接写入
Else
If Len(Sheet1.Cells(x1, y).Value) > 0 Then ' 表1单元格不空,才写入(添加)到表2同一个单元格中
Sheet2.Cells(x2, y + 2).Value = Sheet2.Cells(x2, y + 2).Value & Chr(10) & Sheet1.Cells(x1, y).Value
End If
End If
Next y
End If
End If
Next x1
For y = 1 To 31
Sheet2.Cells(1, y + 3).Value = y & "号"
Next y
Sheet2.Cells(1, 1).Value = "部门"
Sheet2.Cells(1, 2).Value = "工号"
Sheet2.Cells(1, 3).Value = "姓名"
End Sub
|
|