|
|
329397900 发表于 2014-6-27 17:16 
我刚看了下原始数据,就拿编号14的人来说,第2481行和第2869行就是符合的
修改了一下代码,请参考- Private Sub CommandButton1_Click()
- Dim r&, c%, i%, j%
- Dim Arr(), Brr(), Crr()
- Dim Dic1 As New Dictionary
-
- With Sheets("打卡机记录")
- .AutoFilterMode = False
- r = .Range("A" & .Rows.Count).End(xlUp).Row
- Crr = .Range("A1:C" & r).Value
- .Range("A1:C" & r).Sort key1:=.Range("B1"), key2:=.Range("C1")
- Arr = .Range("A1:C" & r).Value
- .Range("A1:C" & r).Value = Crr '还原成排序前的状态
- End With
-
- For i = 1 To UBound(Arr)
- If Not Dic1.Exists(Arr(i, 2) & "%" & Format(Arr(i, 3), "yyyy-m-d")) Then
- ReDim Brr(1 To 3)
- Brr(3) = "不符合"
- Dic1(Arr(i, 2) & "%" & Format(Arr(i, 3), "yyyy-m-d")) = Brr '存入
- End If
-
- Brr = Dic1(Arr(i, 2) & "%" & Format(Arr(i, 3), "yyyy-m-d")) '提取
- If Brr(3) = "符合" Then GoTo 100 '已经“符合”的打卡数据不再判断
-
- If Format(Arr(i, 3), "hh:mm:ss") <= "08:00:00" Then
- Brr(1) = 1
- ElseIf (Format(Arr(i, 3), "hh:mm:ss") > "12:00:00") * (Format(Arr(i, 3), "hh:mm:ss") <= "14:00:00") Then
- Brr(2) = 1
- End If
-
- If Brr(1) * Brr(2) Then Brr(3) = "符合"
- Dic1(Arr(i, 2) & "%" & Format(Arr(i, 3), "yyyy-m-d")) = Brr '更新打卡符合记录
- 100:
- Next
-
- '将打卡记录写入表中
- r = Cells(Rows.Count, 1).End(xlUp).Row
- c = Cells(1, Columns.Count).End(xlToLeft).Column
- Range("B2").Resize(r - 1, c - 1).ClearContents
- Arr = Range("A1").Resize(r, c).Value
-
- For i = 2 To UBound(Arr)
- For j = 2 To UBound(Arr, 2)
- If Dic1.Exists(Arr(1, j) & "%" & Arr(i, 1)) Then
- Arr(i, j) = Dic1(Arr(1, j) & "%" & Arr(i, 1))(3)
- End If
- Next
- Next
- Range("A1").Resize(r, c).Value = Arr '回写
- End Sub
复制代码 |
|