Sub LapDanhSach()
Application.DisplayAlerts = False
Dim xDs As Object, xInDs As Object
Dim sTs As Byte, phong As Byte, rDs As Integer
Set xDs = ThisWorkbook.Sheets("Danh sach")
Set xInDs = ThisWorkbook.Sheets("Mau DS")
' Buoc 1: kiem tra so thi sinh 1 phòng
sTs = Application.InputBox("So thi sinh 1 phong ? (0 < So thí sinh < 61)", "Chia phong thi", 25, , , , , 1)
If sTs = False Then
MsgBox "Chua nhap so thi sinh !", vbOKOnly, "Chia phong thi"
Exit Sub
ElseIf sTs > 60 Then
MsgBox "So thi sinh phai nho hon 61 !", vbOKOnly, "Chia phong thi"
Exit Sub
End If
'Buoc 2: tao mau danh sach thi sinh theo so thi sinh trong phong
xInDs.Copy
For r = 1 To sTs - 2
Rows(r + 9).Insert Shift:=xlDown
Cells(r + 8, 1) = r
Next
Cells(r + 8, 1) = sTs - 1
Cells(r + 9, 1) = sTs
Cells(sTs + 9, 1) = Replace(Cells(sTs + 9, 1), "@", sTs)
'Buoc 3: xac dinh so phong thi
m = Application.WorksheetFunction.CountA(xDs.Columns("D")) - 1
If m Mod sTs = 0 Then
m = m / sTs
Else
m = Int(m / sTs) + 1
End If
'm la tong so phong thi
'Buoc 4: chay vong lap tu 1 den m tao danh sach phong thi
rDs = 2: phong = 1
For phong = 1 To m
'If xDs.Cells(rDs, 1) = "" Then Exit Do
ActiveSheet.Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "P " & phong
vt = InStrRev(Cells(5, 1), " ")
Cells(5, 1) = Left(Cells(5, 1), vt) & phong
For rin = 9 To sTs + 8
If xDs.Cells(rDs, 4) <> "" Then
xDs.Cells(rDs, 1) = phong
xDs.Cells(rDs, 3) = rDs - 1
xDs.Cells(rDs, 2) = rin - 8
Else
xDs.Cells(rDs, 1) = ""
xDs.Cells(rDs, 2) = ""
xDs.Cells(rDs, 3) = ""
End If
Cells(rin, 2) = "'" & Format(xDs.Cells(rDs, 3), "000")
Cells(rin, 3) = xDs.Cells(rDs, 4)
Cells(rin, 4) = xDs.Cells(rDs, 5)
Cells(rin, 5) = xDs.Cells(rDs, 6)
Cells(rin, 6) = xDs.Cells(rDs, 7)
Cells(rin, 7) = xDs.Cells(rDs, 8)
Cells(rin, 8) = xDs.Cells(rDs, 9)
rDs = rDs + 1
Next
ts = Application.WorksheetFunction.CountA(Range(Cells(9, 3), Cells(sTs + 8, 3)))
Cells(sTs + 9, 1) = Replace(Cells(sTs + 9, 1), sTs, ts)
Next
‘Buoc 5: xoa sheet mau
Sheets("Mau DS").Delete
Sheets(1).Activate
End Sub
Cám ơn bạn đã góp ý. Trao đổi thêm với các bạn về chia phòng thi:voda đã viết:Mình xin góp một vài ý về chương trình chia phòng thi của bạn phamduylong:
-Bạn dùng 1 sheet để làm mẫu (Mau DS) rất tiện dụng cho việc chỉnh sửa (thay vì viết luôn vào code)
-Mình nghĩ không cần phải đặt điều kiện về số học sinh trong mỗi phòng là phải <60. Vì chương trình hoạt động trong nhiều điều kiện thì càng tốt.
-Không cần tạo phòng thi trên file mới. Vì khi lưu các tập tin này ta phải đặt tên, chỉ đường dẫn...Nhất là trường hợp, ta chia nhiều lần.
-Nên chia theo phòng , thay vì chia theo số học sinh: Ví dụ: ta có 277 học sinh. Nếu ta chia theo học sinh ( 30 học sinh) sẽ được là 10 phòng. Nhưng phòng 10 chỉ có 7 học sinh.Nếu chia theo số phòng hiệu quả sẽ cao hơn. Ta chia 10 phòng: 7 phòng 28 học sinh, 3 phòng 27 học sinh.
-Mình có một số ý tưởng như thế. Nếu có gì không phải mong bạn bỏ qua.
Lúc trước mình đã post file này lên rồi nhưng sau đó dung lượng của mình không đủ nên xoá. Không nhớ file cũ đã làm thế nào nữa, hi hi. Nay mình làm tạm File khác gởi bạn thao khảo nhé.nguyenthanhtuu đã viết:Tedaynui hãy gửi file của bạn để anh em tham khảo đi. Mình đang thử "phối hợp" đưa đoạn code xếp danh sách ABC và đánh số báo danh vào file của bạn phamduylong. Sẽ gửi lên trong một vài ngày tới. Lâu nay bận quá không vào diễn đàn. Vừa vào đã gặp ngay thông báo nhắc nhở. Ngại quá!
thuongg đã viết:ồ hay quá em thấy các thầy bàn về việc xếp xếp....nhân tiện cho em hỏi có soft nào xếp thời khóa biểu hôn? EM xài TKB3.0Free mà khó quá vì không có chức năng tắt ngày thứ 7(VD như thứ 7 nghỉ), không có chức năng tắt tiết 5( VD như truong HOC đó không có dạy tiết 5)
và tất cả hình như là viet = VBA mà đã khóa rồi nên không học hỏi gì duoc.... xin các thầy chỉ giáo, em xin cảm ơn nhiều ạ
tedaynui đã viết:Lúc trước mình đã post file này lên rồi nhưng sau đó dung lượng của mình không đủ nên xoá. Không nhớ file cũ đã làm thế nào nữa, hi hi. Nay mình làm tạm File khác gởi bạn thao khảo nhé.
Thân
Chia sẻ link cho mọi người cùng thưởng thức với.huuhungpc đã viết:TKB đã có bản 4.0 với mã nguồn mở rồi mà.
Số phòng thi và số thí sinh là không giới hạn anh à. Anh có thể thêm hoặc bớt số phòng thi cũng như số thí sinh từng phòng thi ở Sheet đầu tiên.tigertiger đã viết:Oh, nhưng hình như giới hạn phòng thi, và số thí sinh thì phải (?)
tác giả có thể cộng thêm vào đó hướng dẫn thì hay wa.