主要是因為當TA的關係,
期中考的時候總是要將修課學生亂數名單分配,
還要分配座位表,實在很麻煩,
所以就想寫個小程式讓Excel自動化完成名單分配還有分配座位表。
但因為目前實際上修課126人,所以只要使用兩間教室就夠用。
因此設計的程式也是以兩間教室為準。
Excel工作表介紹
Sheets(1):一開始的修課名單,第一欄是學號,第二欄是姓名
Sheets(2):第一間教室名單 ←VBA程式自動產生
Sheets(3):第二間教室名單 ←VBA程式自動產生
Sheets(4):根據第一個工作表亂數產生的名單,接下來也用來分配座位表。
Private Sub CommandButton1_Click()
ClassRoomOne = TextBox1.Text //第一間教室名稱
ClassRoomTwo = TextBox2.Text //第二間教室名稱
RoomOnePeople = TextBox3.Text //第一間教室人數
CountPeople = TextBox4.Text //修課人數
Module1.初始化巨集
Module1.亂數工作表 //把名單先複製到新的工作表,然後亂數排序新工作表的名單
//把亂數過後的名單依據第一間教室人數複製到該教室名單的工作表
For i = 2 To RoomOnePeople + 1
Sheets(2).Cells(i, 1) = Sheets(4).Cells(i, 1)
Sheets(2).Cells(i, 2) = Sheets(4).Cells(i, 2)
Next
//把亂數的名單按照學號由小到大重新排列,若要由大至小排列則把最後的1改成2即可
Sheets(2).Range("A2", "B" & RoomOnePeople + 1).Sort Sheets(2).Range("A1"), 1
Sheets(2).Range("A1", "B" & RoomOnePeople + 1).Borders.LineStyle = 1 //畫上框線
//把剩餘的名單複製到第二間教室名單的工作表
For i = RoomOnePeople + 2 To CountPeople + 1
Sheets(3).Cells(i - RoomOnePeople, 1) = Sheets(4).Cells(i, 1)
Sheets(3).Cells(i - RoomOnePeople, 2) = Sheets(4).Cells(i, 2)
Next
//把亂數的名單按照學號由小到大重新排列
Sheets(3).Range("A2", "B" & CountPeople - RoomOnePeople + 1).Sort Sheets(3).Range("A1"), 1
Sheets(3).Range("A1", "B" & CountPeople - RoomOnePeople + 1).Borders.LineStyle = 1
End Sub
然後我建了一個UserForm以及四個TextBox來接收使用者輸入的參數
還有一個CommandButton來讓使用者按下之後開始亂數分配教室名單
程式執行完成後,就會有兩張工作表來儲存兩間亂數過後的教室名單。
至於 Module1.亂數工作表的演算法部分,我打算另寫一篇文章來介紹^_^
沒有留言:
張貼留言