Sub chuyen_doi()
Dim lastRow As Long, r As Long, k As Long, count As Long, cotInOut As Long, ngay, dulieuCN As String, InOut, ma As String, hoten As String, dulieu(), kq()
' xoa ket qua cu
With ThisWorkbook.Worksheets("Du lieu ket qua")
lastRow = .Cells(Rows.count, "A").End(xlUp).Row
If lastRow > 1 Then .Range("A2:E" & lastRow).ClearContents
End With
With ThisWorkbook.Worksheets("Du lieu nguon")
lastRow = .Cells(Rows.count, "J").End(xlUp).Row ' dong cuoi co du lieu o cot J
If lastRow < 11 Then Exit Sub ' khong co du lieu thi don do choi
dulieu = .Range("B10:J" & lastRow).Value ' lay du lieu nguon vao mang dulieu
End With
ReDim kq(1 To 3 * UBound(dulieu, 1), 1 To 5) ' chua ro so dong ket qua, lay trung binh so dong gap 3 lan so dong nguon
For r = 1 To UBound(dulieu, 1) ' duyet tung dong nguon
If dulieu(r, 1) <> "" Then ' cot dau tien co dang: <ma> - <hoten> (<...>)
dulieuCN = dulieu(r, 1)
k = InStr(1, dulieuCN, "-")
ma = Trim(Mid(dulieuCN, 1, k - 1)) ' ma NV hien hanh
hoten = Trim(Mid(dulieuCN, k + 1, InStr(1, dulieuCN, "(") - k - 1)) ' ho ten nhan vien hien hanh
Else
If dulieu(r, 4) <> "" Then
ngay = Split(dulieu(r, 4), "/")
ngay = DateSerial(ngay(2), ngay(1), ngay(0)) ' ngay hien hanh
End If
InOut = dulieu(r, 9)
If InStr(1, InOut, "In:", vbTextCompare) Then
cotInOut = 4 ' gio nhap vao cot In
Else
cotInOut = 5 ' gio nhap vao cot Out
End If
InOut = Trim(Mid(InOut, InStr(1, InOut, ":") + 1))
If InOut <> "" Then
InOut = Split(InOut, ";") ' mang thoi gian vao hoav ra
For k = 0 To UBound(InOut, 1)
count = count + 1 ' so dong co du lieu trong mang ket qua
kq(count, 1) = ma ' ma NV
kq(count, 2) = hoten ' ho ten NV
kq(count, 3) = ngay ' ngay
kq(count, cotInOut) = Trim(InOut(k)) ' gio ra / vao
Next k
End If
End If
Next r
If count Then ThisWorkbook.Worksheets("Du lieu ket qua").Range("A2").Resize(count, 5).Value = kq ' nhap ket qua xuong sheet
End Sub