Hướng dẫn em cách tính tổng thơi gian nhân viên đi làm, và lọc nhân viên đó Log vào lúc mấy giờ và Out ra lúc mấy giờ. (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Hahai_123

Thành viên mới
Tham gia
11/1/19
Bài viết
37
Được thích
6
Em có bảng tổng hợp giờ làm của nhân viên.
Mỗi nhân viên sẽ có 1 ID = 3 số (Ví dụ 307, 315, 485...)
Và sẽ phân làm 4 nhánh: 1, 2, 3, 5.
Ví dụ:
307 nhánh 1 : 1091_Sk1., TruongMinh_307.
307 nhánh 2 : 1091_Sk2., TruongMinh_307.
Em muốn lọc ra nhân viên 307 trong ngày hôm đó tổng bạn đã làm được bao nhiêu giờ và bắt đầu vào làm lúc mấy giờ kết thúc ca lúc mấy giờ.
 

File đính kèm

Em có bảng tổng hợp giờ làm của nhân viên.
Mỗi nhân viên sẽ có 1 ID = 3 số (Ví dụ 307, 315, 485...)
Và sẽ phân làm 4 nhánh: 1, 2, 3, 5.
Ví dụ:
307 nhánh 1 : 1091_Sk1., TruongMinh_307.
307 nhánh 2 : 1091_Sk2., TruongMinh_307.
Em muốn lọc ra nhân viên 307 trong ngày hôm đó tổng bạn đã làm được bao nhiêu giờ và bắt đầu vào làm lúc mấy giờ kết thúc ca lúc mấy giờ.
File đuôi .xls rủi ro virus khá cao, lưu lại .xlsx và gởi lại file
 
Insert sheet KQ
Mã:
Sub ABC()
  Dim sArr(), Res(), Dic As Object, tmp$, iKey$
  Dim i&, sRow&, k&, ik&
  With Sheet1
    i = .Range("E" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A3:E" & i).Value
  End With
  sRow = UBound(sArr)
  ReDim Res(1 To sRow, 1 To 4)
  Set Dic = CreateObject("scripting.dictionary")
  For i = 1 To sRow
    If sArr(i, 3) <> Empty Then
      tmp = sArr(i, 1)
      If tmp <> Empty Then
        iKey = Split(tmp, ", ")(1)
      End If
      If Dic.exists(iKey) = False Then
          k = k + 1
          Dic.Add iKey, k
          Res(k, 1) = iKey
          Res(k, 2) = sArr(i, 3)
          Res(k, 3) = sArr(i, 4)
          Res(k, 4) = Res(k, 4) + sArr(i, 4) - sArr(i, 3)
      Else
          ik = Dic.Item(iKey)
          If Res(ik, 2) < sArr(i, 3) Then
            Res(ik, 3) = sArr(i, 4)
          Else
            Res(ik, 2) = sArr(i, 3)
          End If
          Res(ik, 4) = Res(ik, 4) + sArr(i, 4) - sArr(i, 3)
      End If
    End If
  Next i
  With Sheet2
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 2 Then .Range("A3:D" & i).ClearContents
    .Range("A3:D3").Resize(k) = Res
    .Range("B3:C3").Resize(k).NumberFormat = "dd/mm/yyyy hh:mm;@"
    .Range("D3").Resize(k).NumberFormat = "hh:mm;@"
  End With
End Sub
 

File đính kèm

Insert sheet KQ
Mã:
Sub ABC()
  Dim sArr(), Res(), Dic As Object, tmp$, iKey$
  Dim i&, sRow&, k&, ik&
  With Sheet1
    i = .Range("E" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A3:E" & i).Value
  End With
  sRow = UBound(sArr)
  ReDim Res(1 To sRow, 1 To 4)
  Set Dic = CreateObject("scripting.dictionary")
  For i = 1 To sRow
    If sArr(i, 3) <> Empty Then
      tmp = sArr(i, 1)
      If tmp <> Empty Then
        iKey = Split(tmp, ", ")(1)
      End If
      If Dic.exists(iKey) = False Then
          k = k + 1
          Dic.Add iKey, k
          Res(k, 1) = iKey
          Res(k, 2) = sArr(i, 3)
          Res(k, 3) = sArr(i, 4)
          Res(k, 4) = Res(k, 4) + sArr(i, 4) - sArr(i, 3)
      Else
          ik = Dic.Item(iKey)
          If Res(ik, 2) < sArr(i, 3) Then
            Res(ik, 3) = sArr(i, 4)
          Else
            Res(ik, 2) = sArr(i, 3)
          End If
          Res(ik, 4) = Res(ik, 4) + sArr(i, 4) - sArr(i, 3)
      End If
    End If
  Next i
  With Sheet2
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i > 2 Then .Range("A3:D" & i).ClearContents
    .Range("A3:D3").Resize(k) = Res
    .Range("B3:C3").Resize(k).NumberFormat = "dd/mm/yyyy hh:mm;@"
    .Range("D3").Resize(k).NumberFormat = "hh:mm;@"
  End With
End Sub
Em ở không ra kết quả ạ
 
Web KT

Bài viết mới nhất

Back
Top Bottom