張鋒鏑
摘 要:Microsoft office Excel,是一款辦公室工作人員常用的辦公軟件。在應用此軟件時,可能會經常進行例如復制粘貼等一些重復的操作,對于一些重復性的操作,可以應用寄生于Excel中的VBA(Visual Basic for Applicattion)語言編寫程序模塊,使重復的任務自動化,從而提高工作效率。
關鍵詞:Excel VBA 工作效率
一、問題的提出
現在多數高中學校的考試閱卷方式為網上閱卷,而多數閱卷系統在閱卷結束后導出的成績數據文件為Excel工作簿。以我校2011級(高三年級)為例,該年級共有32個班級,其中文科12個班級、理科20個班級,全學年要進行8次月考,每次月考閱卷完畢,系統會導出一個Excel工作簿文件,12個文科班的成績存放在一張工作表中,20個理科班的成績存放在另一張工作表中。最終需要把各班的成績分離出來,使每個班級的成績保存在一個獨立的Excel工作簿文件中,然后分發給各班。若每次采用復制粘貼的方法完成成績的分離任務,將耗時2個多小時。下面是筆者針對我校2013級9月份月考成績數據文件“ykcj9月份.xls”(保存文科班成績的工作表名為“文科成績”,保存理科班成績的工作表名為“理科成績”。兩個工作表中的數據排序方式均以第三列“班級”為關鍵字升序排列),運用VBA語言編寫的程序模塊,運行它在幾分鐘內就可以把各個理科班的成績分離出來。
二、程序模塊
Sub flcj( )
Dim i, j, m As Integer
Dim c As String
Windows(“ykcj9月份”).Activate
Sheets(“理科成績”).Select
Rows(1).Select
Selection.Copy
下面是建立20個工作簿文件,用于保存各班成績,并復制粘貼標題行。
For i = 1 To 20
Workbooks.Add
Windows(“book” & i).Activate
Sheets(“sheet1”).Select
ActiveSheet.Paste
Next i
下面是把1213名理科學生的成績數據按班級分別保存在“d:\ 2013級9月份月考”文件夾中,各班級的文件名為班級名稱,如“01班”、“02班”等。
Windows(“ykcj9月份”).Activate
Sheets(“理科成績”).Select
c = Cells(2, 3)
j = 1
m = 1
For i = 2 To 1214
If c <> Cells(i, 3) Then
Windows(“book” & j).Activate
ChDir “d:\20139級月份月考”
ActiveWorkbook.SaveAs Filename:=“d:\ 20139級月份月考\” + c + “班”
j = j + 1
m = 1
Windows(“ykcj9月份”).Activate
Sheets(“理科成績”).Select
c = Cells(i, 3)
End If
Rows(i).Select
Selection.Copy
Windows(“book” & j).Activate
Sheets(“sheet1”).Select
m = m + 1
Range(“A” & m).Select
ActiveSheet.Paste
Windows(“ykcj9月份”).Activate
Sheets(“理科成績”).Select
Next i
Windows(“book” & j).Activate
ChDir “d:\ 2013級9月份月考”
ActiveWorkbook.SaveAs Filename:=“d:\ 2013級9月份月考\” + c + “班”
j = j + 1
End Sub
三、程序說明
以上代碼是把“理科成績”工作表中包含的20個班級成績分離出來,并各自保存為一個工作簿文件。若要把“文科成績”工作表中包含的12個班級成績分離出來,只需作些修改即可。另外,在運行程序模塊之前,要確保成績數據表中的數據排序方式為按班級升序或降序進行排列。endprint