Lịch trực nhật

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi Longlv, 30 Tháng mười một 2005.

8,619 lượt xem

  1. Longlv

    Longlv Thành viên hoạt động

    Bài viết:
    44
    Đã được thích:
    1
    Nơi ở:
    Hanoi
    Nhờ các cao thủ Excel giúp đỡ : Hàng tháng, cơ quan tôi thường làm một lịch trực nhật theo dạng bảng. cột A là Họ tên (vd từ row 2 - 6 là A, B, C, D, E) và dòng 1 (Vd từ column B - ... là các ngày trong tháng 1, 2, .... 30). Sau đó lần lượt đánh dấu X khi đến phiên người đó trực nhật. Công việc này làm bằng tay nên mất rất nhiều thời gian. Không hiểu trong Excel có cách hàm nào để làm công việc này tự động được không. Xin cảm ơn.
     
    #1
  2. NgânGiang

    NgânGiang Cố lên! Cố lên...

    Bài viết:
    202
    Đã được thích:
    0
    Nơi ở:
    Trong Mây mù
    Bạn ơi làm tự động ở cấp độ nào
    Mình nghĩ là bạn cần làm bảng phân công (chứ không phải là chấm công) giống như lập thời khóa biểu chứ?
    như vậy sẽ tính số người và theo số ngày làm việc để phân công đúng không?
     
    #2
  3. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    Ý bạn Long muốn nói là 1 bảng như bảng chấm công, đến ngày nào đó thì tự động điền dấu X tương ứng với nhân viên đó phải không? Thí dụ có 6 nhân viên và tuần làm 6 ngày, Bảng sẽ tự động đánh dấu X tương ứng vào hết 30 ngày trong tháng?
     
    #3
  4. Longlv

    Longlv Thành viên hoạt động

    Bài viết:
    44
    Đã được thích:
    1
    Nơi ở:
    Hanoi
    Mình xin được giải thích rõ hơn. VD: Nhân viên A có lịch trực nhật vào ngày 8/1/2005 là ngày Thứ bảy thì nhân viên B sẽ trực nhật vào ngày 10/1/2005 - Thứ hai rồi lần lượt đến các nhân viên C, D, E... tạo thành một vòng, và lặp đi lặp lại qua các tháng.
     
    #4
  5. HongViet

    HongViet Thành viên thân thiết

    Bài viết:
    286
    Đã được thích:
    10
    Nơi ở:
    Đà nẵng
    Phải dùng VBA thôi!

    Mình nêu trước cách thức; nếu bạn đồng ý sẽ cụ thể sau:
    Cột A: Mã NV
    Cột B: Họ đệm
    Cột C: Tên
    Cột D: Trực nhật
    Cột E: Ngày tháng
    Ô F1 =TODAY()
    Ô G1 = WEEKDAY()
    Đoạn mã CT sẽ dò tìm ngày hôm qua (hay ngày hôm kia - nếu hôm nay là thứ hai) xem ai đã trực và bôi đi chuỗi "<- Trực nhật" ở cột D (& lưu vào biến chuỗi cũng như định dạng ô ở cột E này màu mở hơn);
    Tiếp theo di chuyển xuống 1 hàng và chép biến chuỗi vào ô ở cột D; chép F1 vô ô tương ứng của cột E & định dạng Màu sẩm hơn!
    Nếu việc dò tìm này đã ở cuối DS thí quay lại chép lên đầu DS, xoá đi các ô E3:E(n-1); (dòng cuối để làm bằng chứng và ngày hôm sau mới xoá củng bằng dòng lệnh).
     
    #5
  6. Longlv

    Longlv Thành viên hoạt động

    Bài viết:
    44
    Đã được thích:
    1
    Nơi ở:
    Hanoi
    To: HongViet
    Nếu làm được như cách của bạn thì hay quá. Bạn có thể hướng dẫn chi tiết cách làm được không, vì mình không biết nhiều về VBA lắm. Cảm ơn bạn nhé.
     
    #6
  7. HongViet

    HongViet Thành viên thân thiết

    Bài viết:
    286
    Đã được thích:
    10
    Nơi ở:
    Đà nẵng
    Sửa cho có vẽ chính thống một chút!

    'Bạn Copy đoạn mã sau & dây vào nơi cư ngụ của các macro:
    Sub Auto_Open()
    Const STNhat = "<- Tröïc nhaät"
    Dim SoNV As Integer: Dim NgayT As Variant
    Dim ij As Integer: Dim Chu As String
    1 '. Định Dòng Cuối:
    Sheets("S1").Select: Range("A1").Select
    Selection.End(xlDown).Select
    SoNV = Selection.Row
    NgayT = Date - 1: ij = 1
    If Weekday(Date) = 2 Then NgayT = Date - 2
    2 '. Định Ngày Cần Tìm:
    Do
    ij = 1 + ij
    Chu = "E" & CStr(ij): Range(Chu).Select
    If Len(ActiveCell.Value) < 2 Then Exit Do
    If ActiveCell.Value = Date Then
    Range("A2").Select: Exit Sub
    End If
    3 '. Định người trực hôm nay:
    If ActiveCell.Value = NgayT Then
    With Selection.Font
    .FontStyle = "Normal"
    End With
    Chu = "D" & CStr(ij): Range(Chu).Select
    ActiveCell.Value = ""
    Chu = "D" & CStr(1 + ij)
    If ij = SoNV Then Chu = "D2"
    Range(Chu).Select: ActiveCell.Value = STNhat
    Chu = "E" & CStr(1 + ij)
    If ij = SoNV Then
    Chu = "E3:E" & CStr(ij - 1): Range(Chu).Select
    Selection.Value = ""
    Chu = "E2"
    End If
    Range(Chu).Select: ActiveCell.Value = Date
    With Selection.Font
    .FontStyle = "Bold"
    End With
    End If
    4'. Xoá dòng cuối khi ij=3
    if ij=3 then
    Range("E" & CStr(SoNV)).Select: ActiveCell.Value = ""
    End If
    Loop
    Range("A3").Select
    End Sub
     
    Last edited: 9 Tháng mười hai 2005
    #7
  8. caovietvu

    caovietvu Thành viên sơ cấp

    Bài viết:
    7
    Đã được thích:
    0
    Giới tính:
    Nam
    đúng rồi minhc cũng đang muốn lam lịch trực gồm 7 người và 3 người trực một đêm rồi 4 người trực một đêm và làm thế nào cho các vị trí luôn được công bằng.ví dụ người này muốn đổi cho người kia.
     
    #8

Chia sẻ trang này