【需求】

正常情(qíng)況下,從考勤機中導出的(de)初始數據中,每人每天肯定會多次打卡。

相應的,考勤數據(jù)統計工作(zuò)中,很重要的一件事情就(jiù)是從中剔除“無效”的打卡數據。比如說:

- 從上午多次考勤數據中(zhōng),提取第一次打卡數據;

- 從下午多次考勤數據(jù)中,提取最後(hòu)一次打卡數據。

例如,某人2014年9月18日下(xià)午有2條打卡數據,具(jù)體如下圖:


圖 1 初始考(kǎo)勤數據(jù)示例

處理後,我們(men)要提取“22:41”的考勤數據,並用於下一步的統計,如下圖:


圖 2 提取結果示例

【方法】

Step1:初始數據的初(chū)步處理:

1.1 將日期、時間分割開來,並分兩列存儲:


圖 3 日期、時間分列效果示例

【說明】

- 這個數據數據截取功能(néng);

- 截取日期的公式為:=MID(D3,1,FIND(" ",D3)-1)

-截取時間的公式為(wéi):=MID(D3,FIND(" ",D3)+1,LEN(D3)-FIND(" ",D3))

1.2 判斷(duàn)每條數據屬於上午打卡還是下午打卡:

這個很簡單,直接用分離(lí)出來的(de)打卡時間於12:00去比較即可:

=IF(TIMevalsUE(I4)>=TIMevalsUE("12:00:00"),"下午","上午(wǔ)")

1.3 判斷每條數據屬於上午/下午第幾次打卡:

這個也不(bú)難,屬於表中數據的多條件計數:

=COUNTIFS(A:A,A3,H:H,H3,J:J,J3)

Step1的處理結果如圖3所示。

Step2:從Step1處(chù)理後的(de)數據中(zhōng)剔除“無效數據”並存(cún)儲到另一張表中:

這一步處理起來比較(jiào)繁瑣。如果(guǒ)借助VBA操作,那麽效率會比較好。具體的邏輯也(yě)比較簡單:

※ 按照行依次判斷;

如果重(chóng)複次數(shù)為“1”,則直接取該行(háng)數據,放到目標工作表;

如果重複次數大於“1”,並且是(shì)上午打卡(kǎ),那(nà)麽取(qǔ)當天上午所有打卡數據的第一行數據存儲;

如果重複次數大於(yú)“1”,並且是下午(wǔ)打卡,那麽取當天上午所有(yǒu)打卡數據的最後一行數據存儲;

依據(jù)每次取數結果,判(pàn)斷下次從哪一行開始讀數。


圖 4 上午、下午選取了兩種不同的處理方式

實現Step2的功(gōng)能,具體的代碼如下:

---------------------------------------------------------------------------------------------------------------

Sub 去除重複數據_待改進()

   Dim i As Integer '考勤數據源行數循(xún)環變量

   Dim j As Integer '確定在考勤數(shù)據源中已經找到了第幾行

   Dim k As Integer '確定02-去除無效打卡中(zhōng)已經到(dào)了第幾行

   Dim l As Integer '某人、某天上午/下午(wǔ)共打了多少次卡判(pàn)斷

   Dim m As Integer

   Dim rng_staffcode As Range

   Dim rng_date As Range

   Dim rng_time As Range

   Set rng_staffcode = Worksheets("01-考勤數據源").Range("A3:" & "A" & Range("A65536").End(xlUp).Row)

   Set rng_date = Worksheets("01-考勤數據源").Range("H3:" & "H" & Range("A65536").End(xlUp).Row)

   Set rng_time = Worksheets("01-考勤數據源").Range("J3:" & "J" & Range("A65536").End(xlUp).Row)

   j = 3

   k = 2

      For i = 3 To Worksheets("01-考(kǎo)勤數據源").Range("A65536").End(xlUp).Row

         l = Worksheets("01-考(kǎo)勤數據源").Range("K" & i)

            If l > 1 And Worksheets("01-考勤(qín)數據源").Range("J" & i) = "下午" Then

               Worksheets("02-去除無效打卡(kǎ)").Range("A" & k) = Worksheets("01-考勤數據(jù)源").Range("A" & i + l - 1) '提取員工編號

               Worksheets("02-去除無(wú)效打卡").Range("B" & k) = Worksheets("01-考勤數據源").Range("B" & i + l - 1) '提取姓名

               Worksheets("02-去除無效打卡").Range("C" & k) = Worksheets("01-考勤數據源").Range("C" & i + l - 1) '提取部門

               Worksheets("02-去除無效(xiào)打卡(kǎ)").Range("D" & k) = Worksheets("01-考勤(qín)數據(jù)源").Range("H" & i + l - 1) '提取日期

               Worksheets("02-去除(chú)無效打卡").Range("E" & k) = Worksheets("01-考勤數據源").Range("I" & i + l - 1) '提取時(shí)間

               Worksheets("02-去除無效打卡").Range("F" & k) = Worksheets("01-考勤數(shù)據源").Range("J" & i + l - 1) '提取上/下午

               k = k + l - 1

               i = i + l

            ElseIf l > 1 And Worksheets("01-考勤(qín)數據源").Range("J" & i) = "上午" Then

               Worksheets("02-去除無效(xiào)打卡").Range("A" & k) = Worksheets("01-考勤數據源").Range("A" & i) '提取員工編號

               Worksheets("02-去除無效打卡").Range("B" & k) = Worksheets("01-考勤數據源").Range("B" & i) '提取姓名

               Worksheets("02-去除(chú)無(wú)效打卡(kǎ)").Range("C" & k) = Worksheets("01-考勤數據源(yuán)").Range("C" & i) '提(tí)取部門

               Worksheets("02-去除無(wú)效打(dǎ)卡").Range("D" & k) = Worksheets("01-考勤(qín)數據(jù)源").Range("H" & i) '提取日期

               Worksheets("02-去除無效打卡").Range("E" & k) = Worksheets("01-考勤(qín)數據(jù)源").Range("I" & i) '提取時間

               Worksheets("02-去除無效打卡(kǎ)").Range("F" & k) = Worksheets("01-考勤(qín)數據源").Range("J" & i) '提取上/下午

               k = k + l - 1

               i = i + l

            Else

               Worksheets("02-去除無效打卡").Range("A" & k) = Worksheets("01-考勤數據源").Range("A" & i) '提取員(yuán)工編號

               Worksheets("02-去除無效打卡").Range("B" & k) = Worksheets("01-考勤數據(jù)源").Range("B" & i) '提取姓名

               Worksheets("02-去除無效打卡").Range("C" & k) = Worksheets("01-考勤數據源").Range("C" & i) '提取部門

               Worksheets("02-去除無效打卡").Range("D" & k) = Worksheets("01-考勤數據源").Range("H" & i) '提取日期

               Worksheets("02-去除無效打卡").Range("E" & k) = Worksheets("01-考勤數據源").Range("I" & i) '提取時間

               Worksheets("02-去除無效打卡").Range("F" & k) = Worksheets("01-考勤數據源").Range("J" & i) '提取上/下午

               k = k + 1

               

            End If

      Next i

      

      Worksheets("02-去除無效打卡").UsedRange.Font.Name = "微軟雅黑(hēi)"

      Worksheets("02-去除無效打卡").UsedRange.Borders.LineStyle = xlContinuous

      Worksheets("02-去除(chú)無效打卡").UsedRange.Columns.AutoFit

      Worksheets("02-去除無(wú)效打卡").UsedRange.HorizontalAlignment = xlCenter

      Worksheets("02-去除無效(xiào)打卡(kǎ)").UsedRange.VerticalAlignment = xlCenter

End Sub

---------------------------------------------------------------------------------------------------------------

【說(shuō)明(míng)】

- HR寫的代碼,大家將就著用!

- 如果嫌麻煩,可以直接找我要帶著代碼的Excel表。

您可以返回【考勤係統】首頁或進入(rù)【新聞資訊】閱讀更多資訊