Làm rõ lại yêu cầu đề bài:
Mục đích:
1.Tạo danh sách hội thoại (kaiwa) tiếng nhật hàng tuần.
2. Mỗi nhóm hội thoại gồm 6 người.
3. Mong muốn, người đã hội thoại tuần trước thì tuần này không tham gia.
4. Hai người đã từng gặp nhau gần đây thì không gặp nhau lại.
Bổ sung thông tin: Danh sách gồm khoảng 80 người.
Giải thuật:
Do tên mỗi người có thể trùng nhau, vì vậy sẽ sử dụng mã nhân viên để VBA nhận diện đó là ai. Vì vậy sẽ có cột là Mã nhân viên.
Đương nhiên cũng có cột họ tên, thật ra cột này chỉ mang tính tham khảo, thực chất không tham gia vào quá trình code.
Cần có cột ghi số lần đã hội thoại (kaiwa) để VBA ưu tiên thành viên nào còn ít hội thoại thì nhúp ra cho vào danh sách nhóm. Ta gọi đó là cột số lần kaiwa.
Để nhận diện thành viên đã từng hội thoại với ai, nên có cột lịch sử đã từng hội thoại. Khi tạo nhóm thì sẽ update thông tin này nếu thành viên đó có tham gia vào nhóm.
Ta cũng cần có danh sách nhóm để VBA biết được tuần trước đó có những ai đã tham gia, và loại trừ những người này khi tạo danh sách nhóm mới.
Bạn cần đăng nhập để thấy hình ảnh
Đầu tiên VBA sẽ xác định xem tuần trước đã có ai tham gia hội thoại để loại trừ họ ra trong quá trình tạo danh sách nhóm mới.
Bạn cần đăng nhập để thấy hình ảnh
VBA loại trừ những người này.
Tiếp theo VBA sẽ sắp xếp lại danh sách thành viên theo thứ tự số lần hội thoại (từ nhỏ tới lớn).
Bạn cần đăng nhập để thấy hình ảnh
Những người có số lần hội thoại ít sẽ được ưu tiên khi tạo nhóm mới.
Trong quá trình tạo nhóm xét duyệt thành viên, VBA sẽ kiểm tra lịch sử 5 thành viên cuối cùng (lần hội thoại gần đây nhất) có thành viên nào lọt vào nhóm lần này hay không?
Bạn cần đăng nhập để thấy hình ảnh
Cuối cùng, khi tạo danh sách thành viên, hãy khởi tạo số lần kaiwa mặc định là 0.
Tham khảo file đính kèm:
http://www.mediafire.com/file/a91p6r7ifmwcfs8/TuhocVBA_Taonhomkaiwa.xlsm/file
Kết quả mỗi lần chạy macro được thể hiện ở cells cuối cùng trên cột H.
Download file về thì xóa thông tin trên cột E đi nhé, code xong test thử rồi quên xóa, cứ thế upload 