Excel: phân công lịch trực ngẫu nhiên với VBA

phân công lịch trực ngẫu nhiên với VBA
Phân công lịch trực ngẫu nhiên với VBA

Chia sẻ đến các bạn đoạn mã VBA giúp phân công lịch trực cho nhân viên một cách ngẫu nhiên có loại trừ.

Bảng tính Excel phân công lịch trực ngẫu nhiên
Bảng tính Excel phân công lịch trực ngẫu nhiên

Chúng ta có 3 bảng tính như trên.

  • 2 cột trái nhất là danh sách nhân viên tham gia trực;
  • Bảng B là những mã nhân viên không thể trực tại ca đang ghi;
  • Bảng 3 (C) sẽ là nơi bố trí nhân viên trực ngẫu nhiên & điều kiện là không bố trí trùng ca với danh sách (Bảng B) không thể trực;

Đoạn mã Macro sau đây sẽ thực hiện bố trí ca trực ngẫu nhiên này:

Sub LapLichTruc_1()
 Dim StrC As String, DSNg As String, BanNg As String, Ma_1 As String
 Dim Thu As Integer, Ca As Integer, Tmp As Integer, VTr As Integer
 Dim Cls As Range
 Const FC As String = "; "
'Chép Mã NV Vô Chuôi   '
 With Sheet3
    For Each Cls In .Range(.[A4], .[A4].End(xlDown))
        StrC = Cls.Value & StrC
        If Len(StrC) > 36 Then
            Randomize:                  Tmp = 5 * (2 + 4 * Rnd() \ 1)
            StrC = Mid(StrC, Tmp + 1, Len(StrC)) & Left(StrC, Tmp)
        End If
    Next Cls
'Phân Bô Lich Truc '
    Union([E11:K15], [E17:E27]).Value = ""
    For Thu = 5 To 11
       'Theo Thú Trong Tuân   '
       'Xáo Trôn Ca Dâu Tùng Ngày  '
        Randomize:                  Tmp = 5 * (1 + 5 * Rnd() \ 1)
        StrC = Mid(StrC, Tmp + 1, Len(StrC)) & Left(StrC, Tmp)
        DSNg = StrC
        For Ca = 3 To 7         'Theo Các Ca   '
            BanNg = Replace(Replace(.Cells(Ca, Thu).Value, " ", ""), ";", "")
            If Len(BanNg) < 5 Then
                Cells(Ca, Thu).Offset(8).Value = Left(DSNg, 5)
            Else
               'Xóa Danh Sách Các Cá Nhân Bân    '
                For Tmp = 1 To Len(BanNg) Step 5
                    Ma_1 = Left(BanNg, 5)
                    BanNg = Mid(BanNg, 6, Len(BanNg))
                    DSNg = Replace(DSNg, Ma_1, "")
                Next Tmp
                'Nhâp Nguòi Truc Ca Cua Các Ngày    '
                Cells(Ca, Thu).Offset(8).Value = Left(DSNg, 5)
            End If
            'Nhâp Thêm Ban Ca Truóc Vô Danh Sách Truc Ca Sau   '
            DSNg = Mid(DSNg, 6, Len(DSNg)) & BanNg
        Next Ca
    Next Thu
    MsgBox "Xong Rôi Nha!"
 End With
End Sub

Hy vọng với đoạn VBA Excel nho nhỏ giúp giải quyết công việc một cách nhanh chóng, chuyên nghiệp và tiết kiệm thời gian cho các bạn

5/5 - (1 bình chọn)

Related Posts

Hướng dẫn nhập dữ liệu từ hình ảnh vào Excel

Hướng dẫn nhập dữ liệu từ hình ảnh vào Excel để sử dụng ngay mà không cần phải tìm tới một số công cụ trích xuất dữ liệu từ ảnh.

Sử dụng Pivot Table trong Excel để thống kê dữ liệu trực quan

Sử dụng Pivot Table trong Excel để thống kê dữ liệu trực quan

Hướng dẫn chi tiết cách sử dụng Pivot Table để thống kê dữ liệu trong Excel.

Top 12 kỹ năng Excel cần thiết cho dân văn phòng, kế toán

Top 12 kỹ năng Excel cần thiết cho dân văn phòng, kế toán

Những thủ thuật cơ bản để sử dụng Excel thành thạo và chuyên nghiệp nhất.

Tìm và sửa lỗi REF trong Excel

Hướng dẫn tìm và sửa lỗi #REF! trong Excel

Lỗi #REF! xuất hiện khi sử dụng công thức Excel có chứa cell hoặc vùng tham chiếu không hợp lệ. Lỗi này thường xuất hiện khi bạn xóa 1 ô hoặc vùng dữ liệu trong excel. Lỗi này thường khá phiền nhưng lại có thể khắc phục dễ dàng.

Cách sửa lỗi #div/0 trong Excel

Cách sửa lỗi #DIV/0 trong Excel

Cùng tìm hiểu về nguyên nhân và cách sửa lỗi #DIV/0 thường gặp trong Excel.

Theo dõi
Thông báo của

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận