Đánh số báo danh, chia phòng thi bằng VBA

Liên hệ QC

lethuhien

Thành viên mới
Tham gia
17/5/07
Bài viết
4
Được thích
1
Em đang gặp khó khăn khi lập một form để đánh số báo danh, chia phòng thi, sau đó copy danh sách cho từng phòng và định dạng để in. Có cao thủ VBA nào có thể giúp em được không.
Cảm ơn nhiều, rất nhiều.
 
Chào Lethuhien

Cái này không cân xài đến VBA userform nếu nhu cầu chỉ là dùng cái form rất đơn giản để "điền" các chi tiết cần thiết.

Bạn xem file mẩu đính kèm nhá và có thể sửa đổi để phù hợp nhu cầu.

Mến chào
 

File đính kèm

Upvote 0
Bạn cần cho chi tiết danh sách cần những trường gì? Mẫu in danh sách?
Form mau cua ban digita chỉ hỗ trợ nhập. Không giải quyết chia phòng và in ấn được !
 
Upvote 0
Em có sheet Danhsach (bao gồm họ tên, ngày sinh, lớp). Em cần VBA đánh số báo danh và chia phòng thi từ sheet này và copy danh sách sang các sheet phòng thi tương ứng.
Em hiện có một số đoạn code VBA đánh số báo danh và chia phòng thi trong Access. Không hiểu có dùng được trong Excel không?
 
Upvote 0
Đề nghị bạn lethuhien bổ sung thêm một số yêu cầu để chương trình các bạn làm giúp hoàn chỉnh hơn:
-Các cột trong danh sách gồm :Số thứ tự, số báo danh, họ tên, lớp, ngày sinh, ghi chú.
-Trước khi chia phòng, danh sách học sinh phải được xếp A,B,C ( theo tên).
-Chương trình sẽ có 1 sheet nhập dữ liệu. Khi chạy, các sheet chưá các phòng thi sẽ được tạo ra. Mỗi sheet, 1 phòng cho tiện in ấn. Nếu có macro in nữa thì rất tuyệt.
Không biết có đúng ý của lethuhien chưa?
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn các bác đã giúp đỡ. Tuy nhiên nếu làm được như ý tưởng của bạn voda thì quá Good!
 
Upvote 0
Các bạn tải Chia phong thi.xls về tham khảo
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Để cụ thể hoá vấn đề chia phòng thi, tôi nêu ra một số yêu cầu cụ thể và viết CT (chương trình) để đáp ứng yêu cầu đó.

Yêu cầu: tập tin có 2 sheet:
1. danh sách thí sinh (gồm các trường Phòng,STT/P (số thứ tự trong phòng thi), Số BD, Họ tên, Nữ, Ngày sinh, Nơi sinh, Lớp, Ghi chú) đã sắp xếp theo thứ tự ABC.
2. Mẫu danh sách phòng thi.
CT (chương trình) thực hiện các yêu cầu sau:
1. Mẫu danh sách cho phép chỉnh sửa các nội dung như tên trường, ngày ký, chức vụ, tên người ký.
2. Cho phép nhập số thí sinh trong 1 phòng thi. Số thí sinh 1 phòng không quá 60.
3. Lấy mẫu danh sách tạo ra 1 tập tin mới, tập tin này có n sheet có tên P1, P2, …, Pn (n là số phòng thi trong hội đồng). Số dòng của danh sách bằng số thí sinh trong 1 phòng. Sau khi in xong, không cần lưu lại tập tin này.
4. Ghi số phòng vào “Phòng”, stt trong phòng vào “STT/P”, ghi số báo danh vào “Số BD” trong bảng dữ liệu và điền các dữ liệu vào các cột trong các sheet P1, P2, …, Pn

CT hoạt động như sau:
B1. Lấy thông tin số thí sinh phòng thi vào biến STs, kiểm tra biến sTs có nằm trong phạm vi 1 > 60. Nếu đúng cho phép thực hiện bước 2.

B2. Tạo mẫu danh sách thí sinh (sheet “Mau Ds”) theo đúng số thi sinh trong biến sTs vào 1 tập tin mới. Không lệ thuộc vào tập tin dữ liệu.

B3: xác định số phòng thi vào biến m

B3. Tạo vòng lặp n lần (n là phòng cuối cùng) để nhân bản mẩu danh sách theo số phòng và đặt tên các sheet này là P1, P2, …, Pn. Trong 1 vòng lặp, lấy dữ liệu từ danh sách thí sinh ghi vào sanh sách phòng. Cuối mỗi vòng lặp, ghi số thí sinh có trong danh sách.

B4. Xoá sheet “Mau Ds”. Kết thúc

B5: xoá sheet mẫu

CT viết như sau:

Mã:
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
Đây chỉ là CT minh hoạ, tuỳ theo yêu cầu mà chỉnh lại cho phù hợp.

Các bạn tải Chia phong thi.xls về tham khảo
 

File đính kèm

Upvote 0
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ần chỉnh sửa cuối:
Upvote 0
Chào các bạn !

Mình xin gởi File chia phòng thi (khá đơn giản) : tự đánh số báo danh, số thứ tự và chia phòng. Chỉ thiếu tự sắp xếp A-B-C thôi. Mình chỉ để trên một Sheet, theo mình nghĩ khi hồi phách, lên điểm sẽ rất thuận tiện cho việc kiểm tra và thống kê điểm thi ...
Mong được đóng góp ý kiến.
Thân !
 
Lần chỉnh sửa cuối:
Upvote 0
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.
Cám ơn bạn đã góp ý. Trao đổi thêm với các bạn về chia phòng thi:
- Thường phòng thi có số thí sinh là 25 hoặc 35 (thi THCS, PTTH, ...). Nếu căn cứ số học sinh trong 1 lớp thì thường nhỏ hơn 60. Thực tế, nhiều khi vì điều kiện cơ sở vật chất có thể số thí sinh 1 phòng cao hơn thì bạn chỉnh lại số 60 theo ý mình.
- Tạo phòng thi trên file mới chỉ nhằm mục đích in. Bạn không cần lưu lại choán đĩa. Do lập phòng thi tự động, nếu cần in thêm bạn chạy macro lại để lập phòng thi lại (kết quả không thay đổi nếu dữ liệu không đổi).
- Bạn chia 7 phòng 29 ts, 3 phòng 27 ts vẫn được với điều kiện bạn làm trong nội bộ trường. Còn nguyên tắc chia phòng thi là phòng cuối cùng có 1 ts vẫn là 1 phòng thi (để tránh trường hợp người chia phòng thi cắt phòng tùy tiện để cố tình xếp 2 thí sinh vào 1 phòng)
 
Upvote 0
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á!
 
Upvote 0
ồ 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 ạ
 
Upvote 0
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á!
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
 

File đính kèm

Upvote 0
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 ạ

Cái này tôi đang dùng. TKB đã có bản 4.0 với mã nguồn mở rồi mà. Tắt ngày thứ 7 và tiết 5 được chứ. Ở địa phương tôi trường có 50 lớp, học 2 buổi vẫn chia được tất. Còn hợp lý hay không là do sự tận tụy của người chia thôi.
 
Upvote 0
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

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,
.
 
Upvote 0
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.
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.

TDN
 
Upvote 0
sao em mở file trên mãi mà chẳng được nhỉ
Hay tại máy không mở được file.zip
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom