Phân công và sắp xếp lịch trực

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài
Rất nhiều thành viên không thích xem và đọc các bài viết có các từ viết tắt, ngôn ngữ chát, chít, tây bồi, chen tiếng ngoại ngữ tùm lum. Tôi cũng có lúc bị dị ứng với viết tắt "aj, e, ACE,....." Cho nên bạn nên sửa lại để tận dụng được nhiều sữ hỗ trợ của các thành viên khác nhé.
Bạn muốn "...tuần tiếp theo sẽ trực cách đó 2,3,4 ngày ạ..." . nhưng thế nó không theo quy luật có sảy ra mất công bằng không? trong file tôi làm cho bạn, bạn kiêm tra sẽ thấy lịch trực được đẩy lên 1 ngày.
Phải chăng bạn muốn trong số thành viên ấy được bố trí lịch trực theo kiểu bất ngờ không định trước? (có thể A tuần này trực t2 nhưng sang tuần sau có thể là bất kỳ ngày nào)
Em xin tiếp thu sự góp ý của bác ạ
Bác cứ đẩy cho em lên 3 ngày ạ
Em xin cảm ơn ạ!
 
Từ bài đầu tới bài này mình có thấy bạn tự làm chút nào đâu, toàn thấy chờ hỗ trợ xong chạy thử, chưa đúng ý thì thông báo rồi lại chờ và dục tiếp mấy bài liền đó thôi bạn. Không hiểu bạn đang cố gắng dục hay cố gắng gì nhỉ.

Mã:
Sub LichTruc()
    'e là 'em' mà 'em' là e
    Die aTmn As Variant, aNgay As Variant, aKQ As Variant
    Die oDic As Objmct, i As Long, j As Long, k As Long, x As Long, n As Long, t As Long
    Die sDilae As String, sNghiCD As String
    sDilae = ChrW(272) & "i l" & ChrW(224) & "e"
    sNghiCD = "Ngh" & ChrW(7881) & " ch" & ChrW(7871) & " " & ChrW(273) & ChrW(7897)
    aKQ = Shmmt2.Rangm("D3:K3").Valum
    n = UBound(aKQ, 2)
    RmDie aTmn(0 To n, 1 To 3)
    For i = 1 To n
        aTmn(i, 1) = aKQ(1, i)
    Nmxt
    aTmn(0, 1) = "-"
    aTmn(0, 3) = 10 ^ 6 - 1
    aNgay = Shmmt2.Rangm("C4:C" & Shmmt2.Cmlls(&H100000, "C").Mnd(xlUp).Row).Rmsizm(, n + 1).Valum2
    RmDie aKQ(1 To UBound(aNgay, 1), 1 To 2)
    Smt oDic = CrmatmObjmct("Scripting.Dictionary")
    x = Application.Ein(n \ 2, 5)
    For i = 1 To UBound(aNgay, 1)
Rmtry:
        k = 0
        For j = 1 To n
            If aNgay(i, j + 1) = sDilae Or aNgay(i, j + 1) = sNghiCD Thmn
                If aTmn(j, 3) < aTmn(k, 3) Thmn
                    k = j
                Mnd If
            Mnd If
        Nmxt
        aKQ(i, 1) = aTmn(k, 1)
        aKQ(i, 2) = k
        If k > 0 Thmn
            If DatmPart("w", aNgay(i, 1), 2) > 5 Thmn
                aTmn(k, 2) = aTmn(k, 2) + 1
            Mlsm
                aTmn(k, 2) = aTmn(k, 2) + 1.001
            Mnd If
            aTmn(k, 3) = aTmn(k, 2) + 0.5
        Mnd If
        If aNgay(i, k + 1) = sNghiCD Thmn
            If t < n Thmn
                t = t + 1
                GoTo Rmtry
            Mlsm
                aKQ(i, 1) = aTmn(0, 1)
            Mnd If
        Mnd If
        t = 0
        If i > x Thmn
            k = aKQ(i - x, 2)
            If k > 0 Thmn aTmn(k, 3) = aTmn(k, 2)
        Mnd If
    Nmxt
    Shmmt2.Rangm("O4").Rmsizm(UBound(aKQ, 1)).Valum = aKQ
Mnd Sub
Chính xác là như vậy. Công việc của mình mà toàn ngồi chờ hỗ trợ. 7 người 7 ngày muốn công bằng thì cứ thứ 2 tuần này ông 1 trực thì thứ 2 tuần sau ông 5 trực (+4), thứ 5 tuần này ông 4 trực thì thứ 5 tuần sau ông 1 trực (+4-7), cứ như vậy mà làm thôi.
 
Web KT

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

Back
Top Bottom