Lịch trực nhật

  • Thread starter Longlv
  • Ngày gửi
L

Longlv

Sơ cấp
21/10/05
44
1
8
41
Hanoi
#1
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.
 
N

NgânGiang

Cố lên! Cố lên...
10/5/05
202
0
0
16
Trong Mây mù
www.baominh.com.vn
#2
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?
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#3
Ý 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?
 
L

Longlv

Sơ cấp
21/10/05
44
1
8
41
Hanoi
#4
adam_tran nói:
Ý 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?
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.
 
HongViet

HongViet

Thành viên thân thiết
10/11/05
286
10
18
Đà nẵng
#5
Phải dùng VBA thôi!

Longlv nói:
nhân viên C, D, E... tạo thành một vòng, và lặp lại qua các tháng.
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).
 
L

Longlv

Sơ cấp
21/10/05
44
1
8
41
Hanoi
#6
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é.
 
HongViet

HongViet

Thành viên thân thiết
10/11/05
286
10
18
Đà nẵng
#7
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
 
Sửa lần cuối:
C

caovietvu

Sơ cấp
3/4/15
7
0
1
#8
đú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.
 

Thành viên trực tuyến

  • hoclamseo01
  • HD192
  • binhminhsom
  • Thuận Hưng
  • ngongac
  • TGXD123
  • thaochitran
  • datle21
  • thanhlee
  • thuongdan
  • thaoly2807
  • daongocnam0603
  • lieuvu
  • Mai Chi B
  • hoaithuong140901
  • trandung123
  • huygia88
  • AZ Invoice
  • hieu1605
  • seocuulong
  • hangtt81
  • Trần Mỹ Hảo
  • quynhchi10
  • sxconkho15
  • xediengiatot



Xem nhiều