最簡單的解決方案將是列D2,E2,F2,G2然後複製/粘貼結果篩選出不同的工作表。 如果您希望自動執行此操作,則需要編寫一個宏。 Regards,
編輯:將您的數據移動到名爲「Main」和alt + F11的表格中,打開Visual Basic編輯器,插入>模塊,選擇模塊並粘貼下面的代碼並保存。 alt + F8打開宏並運行ProcessList Macro,它會自動創建你的工作表。
Sub ProcessList()
Dim course As String
Dim studentID As String
Dim studentName As String
Dim studentSurname As String
Application.DisplayAlerts = False
For Each w In Worksheets
If Not w.Name = "Main" Then
w.Delete
End If
Next
Application.DisplayAlerts = True
i = 0
While Not Worksheets("Main").Cells(2 + i, 1) = ""
i = i + 1
Wend
studentcount = i
For i = 0 To studentcount - 1
studentID = Worksheets("Main").Cells(2 + i, 1).Value
studentName = Worksheets("Main").Cells(2 + i, 2).Value
studentSurname = Worksheets("Main").Cells(2 + i, 3).Value
For j = 0 To 3
course = Worksheets("Main").Cells(2 + i, 4 + j).Value
If Not course = "" Then
Call checkcourse(course)
Call insertStudentData(course, studentID, studentName, studentSurname)
End If
Next j
Next i
End Sub
Sub checkcourse(course)
found = False
For Each w In Worksheets
If w.Name = course Then
found = True
End If
Next
If found = False Then
Worksheets.Add().Name = course
End If
End Sub
Sub insertStudentData(wsName As String, studentID, studentName, studentSurname)
i = 0
While Not Worksheets(wsName).Cells(2 + i, 1) = ""
i = i + 1
Wend
Worksheets(wsName).Cells(2 + i, 1).Value2 = studentID
Worksheets(wsName).Cells(2 + i, 2).Value2 = studentName
Worksheets(wsName).Cells(2 + i, 3).Value2 = studentSurname
End Sub
是的,我確實需要它來自動完成,因此,如果一個新的學生行設置的科目增加,那麼這將他們的名字複製到相應的科目表。我之前沒有真正使用宏,設置起來會不會很複雜? – Bryony309
我已編輯它。這應該自動創建你的工作表。 –
這太神奇了!它發現了一個錯誤,雖然「下一個 如果找到= False然後 Worksheets.Add()。Name = course End If」 – Bryony309