Kiểm Tra chấm công và nghỉ phép

Liên hệ QC

Masu1991

Thành viên hoạt động
Tham gia
21/3/20
Bài viết
110
Được thích
14
Chào anh chị,

Em có 1 sheet CONG và Sheet PHEP. Em muốn so sánh xem 2 sheet có khớp dữ liệu với nhau không?
- sheet CÔNG: mỗi người sẽ có 28,29,30,31 dòng (tùy theo tháng)
- sheet PHÉP:
+ Nếu chỉ nghỉ 1 ngày thì khoản thời gian TỪ NGÀY - ĐẾN NGÀY là như nhau (ghi chú hình: Màu hồng)
+ nếu nghỉ dài hạn khoản thời gian TỪ NGÀY - ĐẾN NGÀY là 1 khoảng thời gian tương ứng số ngày nghỉ (ghi chú hình: Màu xanh).
1659059372158.png

- Kết quả trả về loại phép ở cột AV Của sheet CONG:
1659059512916.png

Ghi chú: Những cột bị ẩn là dữ liệu thừa nên em đã ẩn đi.

Em xin cảm ơn anh chị đã hỗ trợ
 

File đính kèm

  • GPE TRỢ GIÚP.xlsb
    627.7 KB · Đọc: 15
Em có 1 sheet CONG và Sheet PHEP. Em muốn so sánh xem 2 sheet có khớp dữ liệu với nhau không?


Chào bạn,

Bạn thử dùng công thức sau trong hàng 6578:

=IFERROR(LOOKUP(2,1/(PHEP!$C$2:$C$596=H6578)/(PHEP!$I$2:$I$596<=N6578)/(PHEP!$J$2:$J$596>=N6578),PHEP!$Q$2:$Q$596),"")

...

Nhầm! Đây là box Lập trình.

.
 
Upvote 0
Chào bạn,

Bạn thử dùng công thức sau trong hàng 6578:

=IFERROR(LOOKUP(2,1/(PHEP!$C$2:$C$596=H6578)/(PHEP!$I$2:$I$596<=N6578)/(PHEP!$J$2:$J$596>=N6578),PHEP!$Q$2:$Q$596),"")

...

Nhầm! Đây là box Lập trình.

.
Như vầy đi:

Function LapTrinh(Optional byVal rw As Long = 0)
If rw <= 0 Then rw = Application.Caller.Row
LapTrinh = Evaluate( _
"IFERROR(LOOKUP(2,1/(PHEP!$C$2:$C$596=H" & rw & ")/(PHEP!$I$2:$I$596<=N" & rw & "/(PHEP!$J$2:$J$596>=N" & rw & "),PHEP!$Q$2:$Q$596),"""")"
End Function
 
Upvote 0
Như vầy đi:

Function LapTrinh(Optional byVal rw As Long = 0)
If rw <= 0 Then rw = Application.Caller.Row
LapTrinh = Evaluate( _
"IFERROR(LOOKUP(2,1/(PHEP!$C$2:$C$596=H" & rw & ")/(PHEP!$I$2:$I$596<=N" & rw & "/(PHEP!$J$2:$J$596>=N" & rw & "),PHEP!$Q$2:$Q$596),"""")"
End Function
Dạ, con chào bác, công thức của hàm tự tạo tên LapTrinh như thế nào vậy bác, con xem mà chưa hiểu cách làm.
Con có thay đổi cột C thành cột A vì sẽ lấy theo mã số thẻ, cột H thành cột L
 
Upvote 0
Gọp
Chào anh chị,

Em có 1 sheet CONG và Sheet PHEP. Em muốn so sánh xem 2 sheet có khớp dữ liệu với nhau không?
- sheet CÔNG: mỗi người sẽ có 28,29,30,31 dòng (tùy theo tháng)
- sheet PHÉP:
+ Nếu chỉ nghỉ 1 ngày thì khoản thời gian TỪ NGÀY - ĐẾN NGÀY là như nhau (ghi chú hình: Màu hồng)
+ nếu nghỉ dài hạn khoản thời gian TỪ NGÀY - ĐẾN NGÀY là 1 khoảng thời gian tương ứng số ngày nghỉ (ghi chú hình: Màu xanh).


- Kết quả trả về loại phép ở cột AV Của sheet CONG:


Ghi chú: Những cột bị ẩn là dữ liệu thừa nên em đã ẩn đi.

Em xin cảm ơn anh chị đã hỗ trợ
Góp vui. Thử chạy đoạn code này xem sao.
Mã:
Option Explicit

Sub TimKiem()
Dim i&, j, t&, k&, Lr&, LrC&
Dim Arr(), ArrC(), Res(), KQ()
Dim Dic As Object, Key, Temp

With Sheets("PHEP")
Lr = .Cells(Rows.Count, 1).End(xlUp).Row
Arr = .Range("A2:S" & Lr).Value
End With
ReDim Res(1 To UBound(Arr) * 30, 1 To 4)
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Arr)
    If Arr(i, 9) <> Arr(i, 10) Then
        For j = Arr(i, 9) To Arr(i, 10)
            Key = Arr(i, 1) & "#" & Arr(i, 3) & "#" & j '& "#" & Arr(i, 17)
            If Not Dic.Exists(Key) Then
                t = t + 1: Dic.Add (Key), t
                Res(t, 1) = Arr(i, 1)
                Res(t, 2) = Arr(i, 3)
                Res(t, 3) = j
                Res(t, 4) = Arr(i, 17)
            End If
        Next j
    Else
        Key = Arr(i, 1) & "#" & Arr(i, 3) & "#" & Arr(i, 9) '& "#" & Arr(i, 17)
        If Not Dic.Exists(Key) Then
                t = t + 1: Dic.Add (Key), t
                Res(t, 1) = Arr(i, 1)
                Res(t, 2) = Arr(i, 3)
                Res(t, 3) = Arr(i, 9)
                Res(t, 4) = Arr(i, 17)
            End If
    End If
Next i
With Sheets("CONG")
LrC = .Cells(Rows.Count, 12).End(xlUp).Row
ArrC = .Range("A2:S" & LrC).Value
ReDim KQ(1 To UBound(ArrC), 1 To 1)
For i = 1 To UBound(ArrC)
Temp = ArrC(i, 12) & "#" & ArrC(i, 8) & "#" & ArrC(i, 14) '& "#" & ArrC(i, 19)
If Dic.Exists(Temp) Then
    KQ(i, 1) = "OK"
End If
Next i
    .Range("AV2").Resize(i, 1) = KQ
End With
Set Dic = Nothing
End Sub
Các nội dung khác bạn tùy chỉnh
 
Upvote 0
Gọp

Góp vui. Thử chạy đoạn code này xem sao.
Mã:
Option Explicit

Sub TimKiem()
Dim i&, j, t&, k&, Lr&, LrC&
Dim Arr(), ArrC(), Res(), KQ()
Dim Dic As Object, Key, Temp

With Sheets("PHEP")
Lr = .Cells(Rows.Count, 1).End(xlUp).Row
Arr = .Range("A2:S" & Lr).Value
End With
ReDim Res(1 To UBound(Arr) * 30, 1 To 4)
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Arr)
    If Arr(i, 9) <> Arr(i, 10) Then
        For j = Arr(i, 9) To Arr(i, 10)
            Key = Arr(i, 1) & "#" & Arr(i, 3) & "#" & j '& "#" & Arr(i, 17)
            If Not Dic.Exists(Key) Then
                t = t + 1: Dic.Add (Key), t
                Res(t, 1) = Arr(i, 1)
                Res(t, 2) = Arr(i, 3)
                Res(t, 3) = j
                Res(t, 4) = Arr(i, 17)
            End If
        Next j
    Else
        Key = Arr(i, 1) & "#" & Arr(i, 3) & "#" & Arr(i, 9) '& "#" & Arr(i, 17)
        If Not Dic.Exists(Key) Then
                t = t + 1: Dic.Add (Key), t
                Res(t, 1) = Arr(i, 1)
                Res(t, 2) = Arr(i, 3)
                Res(t, 3) = Arr(i, 9)
                Res(t, 4) = Arr(i, 17)
            End If
    End If
Next i
With Sheets("CONG")
LrC = .Cells(Rows.Count, 12).End(xlUp).Row
ArrC = .Range("A2:S" & LrC).Value
ReDim KQ(1 To UBound(ArrC), 1 To 1)
For i = 1 To UBound(ArrC)
Temp = ArrC(i, 12) & "#" & ArrC(i, 8) & "#" & ArrC(i, 14) '& "#" & ArrC(i, 19)
If Dic.Exists(Temp) Then
    KQ(i, 1) = "OK"
End If
Next i
    .Range("AV2").Resize(i, 1) = KQ
End With
Set Dic = Nothing
End Sub
Các nội dung khác bạn tùy chỉnh
Cảm ơn anh đã hỗ trợ, phiền anh thay thế OK thành dữ liệu ở lấy từ cột Q ở sheet PHEP, vì em phải so sanh phép giữa sheet CONG và PHÉP có khớp không á anh.
 
Upvote 0
Cảm ơn anh đã hỗ trợ, phiền anh thay thế OK thành dữ liệu ở lấy từ cột Q ở sheet PHEP, vì em phải so sanh phép giữa sheet CONG và PHÉP có khớp không á anh.
OK nghĩa là khớp rồi đấy. Còn nếu muốn thay "...OK thành dữ liệu ở lấy từ cột Q ở sheet PHEP" thì bạn thay dòng
Mã:
KQ(i, 1) = "OK"
Thành
Mã:
KQ(i, 1) = Res(Dic.Item(Temp), 4)
và chạy lại code
 
Upvote 0
Nhờ các anh các chị thêm giúp công thức tính ngày phép cho các bạn có thâm niên làm việc dưới 1 năm, và quy định là ngày vào làm việc sau ngày 15 sẽ không được tính ngày phép của tháng đó ạ! Trân trọng cảm ơn
 

File đính kèm

  • Bang tinh luong.xlsx
    85.1 KB · Đọc: 4
Upvote 0
Gọp

Góp vui. Thử chạy đoạn code này xem sao.
Mã:
Option Explicit

Sub TimKiem()
Dim i&, j, t&, k&, Lr&, LrC&
Dim Arr(), ArrC(), Res(), KQ()
Dim Dic As Object, Key, Temp

With Sheets("PHEP")
Lr = .Cells(Rows.Count, 1).End(xlUp).Row
Arr = .Range("A2:S" & Lr).Value
End With
ReDim Res(1 To UBound(Arr) * 30, 1 To 4)
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Arr)
    If Arr(i, 9) <> Arr(i, 10) Then
        For j = Arr(i, 9) To Arr(i, 10)
            Key = Arr(i, 1) & "#" & Arr(i, 3) & "#" & j '& "#" & Arr(i, 17)
            If Not Dic.Exists(Key) Then
                t = t + 1: Dic.Add (Key), t
                Res(t, 1) = Arr(i, 1)
                Res(t, 2) = Arr(i, 3)
                Res(t, 3) = j
                Res(t, 4) = Arr(i, 17)
            End If
        Next j
    Else
        Key = Arr(i, 1) & "#" & Arr(i, 3) & "#" & Arr(i, 9) '& "#" & Arr(i, 17)
        If Not Dic.Exists(Key) Then
                t = t + 1: Dic.Add (Key), t
                Res(t, 1) = Arr(i, 1)
                Res(t, 2) = Arr(i, 3)
                Res(t, 3) = Arr(i, 9)
                Res(t, 4) = Arr(i, 17)
            End If
    End If
Next i
With Sheets("CONG")
LrC = .Cells(Rows.Count, 12).End(xlUp).Row
ArrC = .Range("A2:S" & LrC).Value
ReDim KQ(1 To UBound(ArrC), 1 To 1)
For i = 1 To UBound(ArrC)
Temp = ArrC(i, 12) & "#" & ArrC(i, 8) & "#" & ArrC(i, 14) '& "#" & ArrC(i, 19)
If Dic.Exists(Temp) Then
    KQ(i, 1) = "OK"
End If
Next i
    .Range("AV2").Resize(i, 1) = KQ
End With
Set Dic = Nothing
End Sub
Các nội dung khác bạn tùy chỉnh
Nhờ mở pass hộ em file này
 

File đính kèm

  • THUONG THANG 3.xlsx
    1 MB · Đọc: 7
Upvote 0
Web KT

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

Back
Top Bottom