Hỏi về cách sắp xếp lịch trực

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

nguyenhoangtuananh9897

Thành viên mới
Tham gia
6/4/22
Bài viết
38
Được thích
10
Chào các thành viên trên diễn đàn,

Nhờ các bạn giúp mình công thức để xếp lịch trực với điều kiện không trùng lịch bận (sheet LICH BAN). Mỗi ô trong bảng LICH TRUC chỉ cần 01 tên nhân viên.
VD: NV A và NV C có việc bận vào ca 1 và ca 2 của ngày T2 thì lịch trực ca 1 và ca 2 của ngày thứ 2 sẽ random cho các thành viên còn lại.
Nếu Sheet LICH BAN và LICH TRUC của mình trình bày không khoa học thì có thể thay đổi cách thể hiện.

Link (chỉnh sửa): https://docs.google.com/spreadsheet...TkMMOxTGy3PmGZCeWLLyPgtYU/edit?usp=share_link


Chúc mọi người một ngày tốt lành.
 
Cái chuyện này khá là kỳ công & như vây chủ bài đăng sẽ phải chờ hơi bị lâu, nhưng . . . . . !
 
Mình vừa thử công thức theo đề bài bạn mô tả. Mong rằng ra đúng đáp án bạn mong muốn
 
Tạm tham khảo cách mình mần trên Excel nhờ VBA:

Chúc mọi người vui vẻ & sức khỏe!
 

File đính kèm

  • BCC.rar
    30.8 KB · Đọc: 44
Thật ra chủ bài đăng đang cần giải quyết sự vụ trên G Sheet, nhưng mình lại giải vấn đề trên Excel nên chỉ tham khảo cho vui thôi.
Chúc mọi điều tốt lành!
 
Biết là vậy nhưng vì cơ quan dùng google sheet thay cho Excel. Nếu dùng Excel thì mình nghĩ code VBA sẽ giải quyết được :)
Google sheets dùng Google Apps Script.
Nếu bạn nghĩ vấn đề này giải quyết được bằng VBA thì cứ việc đưa cái code VBA ấy lên đây. Sẽ có người dịch sang Apps Script giúp cho bạn.
 
Chào các thành viên trên diễn đàn,

Nhờ các bạn giúp mình công thức để xếp lịch trực với điều kiện không trùng lịch bận (sheet LICH BAN). Mỗi ô trong bảng LICH TRUC chỉ cần 01 tên nhân viên.
VD: NV A và NV C có việc bận vào ca 1 và ca 2 của ngày T2 thì lịch trực ca 1 và ca 2 của ngày thứ 2 sẽ random cho các thành viên còn lại.
Nếu Sheet LICH BAN và LICH TRUC của mình trình bày không khoa học thì có thể thay đổi cách thể hiện.

Link (chỉnh sửa): https://docs.google.com/spreadsheet...TkMMOxTGy3PmGZCeWLLyPgtYU/edit?usp=share_link


Chúc mọi người một ngày tốt lành.
Mình vẫn không hiểu bạn cần chia lịch trực từ cái gì. Ví dụ có danh sách nhân viên và các yêu cầu chia lịch trực thế nào. Kết quả cần là gì.
 
VBA: dùng mảng thì mình không biết, nhưng nếu làm thủ công thì có thể như vầy. Copy từng ô của trong sheet LICH BAN sang sheet trung gian. Sau đó copy cột "Tên nhân viên" sang sheet trung gian này. Dùng chức năng find với keyword là tên nhân viên trong cột "Tên nhân viên". Nếu kết quả tìm kiếm trong sheet đó lớn hơn 1 - xóa tên nhân viên đó. Sau một vòng lặp, tên nhân viên nào còn sót lại -> nhân viên không bận. Dùng random để lấy ngẫu nhiên tên các nhân viên còn xót lại dán vào sheet LICH TRUC. Tiếp tục dùng vòng lặp cho đến khi đi hết bảng LICH TRUC -> cách thủ công này rất chậm nhưng dễ hiểu cho những ai không thường sử dụng mảng. Chỉ tiếc đã lâu không đụng đến code :)
 
Lần chỉnh sửa cuối:
VBA: . . . . . -> cách thủ công này rất chậm nhưng dễ hiểu cho những ai không thường sử dụng mảng. Chỉ tiếc đã lâu không đụng đến code :)
Biết VBA cũng giống như biết bơi hay biết đi xe đạp ý mà! Chả thể bị tai nạn ảnh hưởng đến sự sống đâu mà lo!

Còn chuyện đề ra các bước để VBA thực hiện thì theo mình nên thế này:
[Bước quan trọng không thể thiếu]: Tạo mã duy nhất cho mỗi nhân viên; Mã NV có yêu cầu là độ dài mã cũng như nhau;
B2: Chép cột mã NV này sang 1 cột trung gian
B3 & B4: Tạo vòng lặp duyệt theo các thứ trong tuần (7) & vòng lặp thứ 2 theo ca trong ngày (5)
B5: Với từng ca trong ngày, ta xác định (các) nhân viên 'BẬN' & xóa những mã 'Bận' trong cột trung gian trên;
B6: Trộn các ô còn lại trong cột trung gian để lấy ra 1 mã NV làm người trực;
Quá trình này lặp lại cho đến ca thứ 5 của ngày cuối tuần.
 
Chào các thành viên trên diễn đàn,

Nhờ các bạn giúp mình công thức để xếp lịch trực với điều kiện không trùng lịch bận (sheet LICH BAN). Mỗi ô trong bảng LICH TRUC chỉ cần 01 tên nhân viên.
VD: NV A và NV C có việc bận vào ca 1 và ca 2 của ngày T2 thì lịch trực ca 1 và ca 2 của ngày thứ 2 sẽ random cho các thành viên còn lại.
Nếu Sheet LICH BAN và LICH TRUC của mình trình bày không khoa học thì có thể thay đổi cách thể hiện.

Link (chỉnh sửa): https://docs.google.com/spreadsheet...TkMMOxTGy3PmGZCeWLLyPgtYU/edit?usp=share_link


Chúc mọi người một ngày tốt lành.
bạn tham khảo sheet 1672304955271.png nha, mình chỉ random người không trùng theo cách:
+ Lấy list tất cả NV xóa đi người bận ngày/ca đó
+ Random trên list đó.
Hết.
 
Web KT
Back
Top Bottom