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