lidedong82 发表于 2024-1-19 17:52

最好能自动识别早班,中班,晚班

每月都要手动核对,还容易出错,有没办法可以自动识别出来班次,具体要求看附件,谢谢大家!!

心正意诚身修 发表于 2024-1-21 10:19

不考虑迟到和早退的情况吗?
比如   15:55分。可能是早班下班早退。也可能是中班正常上班要卡。

心正意诚身修 发表于 2024-1-21 11:05

写了一半,又还有一种情况。比如,一个人刚好是16:00打卡。那这时候算是早班的下班卡,还是中班的上班卡。这些都是问题。没办法搞。

心正意诚身修 发表于 2024-1-21 12:59

Sub 考勤()
Dim srow As Single, arr, brr, crr, i As Single, j As Byte
srow = Range("a1").End(xlDown).Row
arr = Range("a1:c" & srow)
ReDim brr(1 To srow - 1)
'ReDim crr(1 To 3)
For i = 2 To srow
    If arr(i, 3) <> "" Then
       k = (Len(arr(i, 3)) + 1) / 9
       crr = Split(arr(i, 3), ";")
      For j = 0 To k - 1
            If CDate(crr(j)) - 0 >= 0.28 And CDate(crr(j)) - 0 <= 0.33 Then
                brr(i - 1) = brr(i - 1) & Day(arr(i, 1)) & "日早班上班卡;"
            ElseIf CDate(crr(j)) - 0 >= 0.58 And CDate(crr(j)) - 0 <= 0.666 Then
                brr(i - 1) = brr(i - 1) & Day(arr(i, 1)) & "日中班上班卡;"
            ElseIf CDate(crr(j)) - 0 >= 0.6666666 And CDate(crr(j)) - 0 <= 0.79 Then
               brr(i - 1) = brr(i - 1) & Day(arr(i, 1)) & "日早班下班卡;"
            ElseIf CDate(crr(j)) - 0 >= 0.9 Then
               brr(i - 1) = brr(i - 1) & Day(arr(i, 1)) & "日晚班上班卡;"
             ElseIf CDate(crr(j)) - 0 >= 0 And CDate(crr(j)) - 0 <= 0.15 Then
               brr(i - 1) = brr(i - 1) & Day(CDate(arr(i, 1)) - 1) & "日中班下班卡;"
            ElseIf CDate(crr(j)) - 0 >= 0.33 And CDate(crr(j)) - 0 < 0.45 Then
               brr(i - 1) = brr(i - 1) & Day(arr(i, 1)) & "日晚班下班卡;"
            End If
      Next
    End If
Next
Range("d2").Resize(i - 2, 1) = Application.Transpose(brr)
End Sub

心正意诚身修 发表于 2024-1-21 13:00

本帖最后由 心正意诚身修 于 2024-1-21 13:16 编辑

比如8:00:00-8:00:59 这个时间段内,上班和下班都有可能,比较难以界定。鉴于以上几点原因。。结果可能有误 。我粗略的检查了一下。就目前的数据而言。没什么问题。

lidedong82 发表于 2024-1-22 09:55

心正意诚身修 发表于 2024-1-21 13:00
比如8:00:00-8:00:59 这个时间段内,上班和下班都有可能,比较难以界定。鉴于以上几点原因。。结果可能有误 ...

好的,谢谢,我先试下整月的数据
页: [1]
查看完整版本: 最好能自动识别早班,中班,晚班