摘 要:利用VBA可以快速地實現將多個工作簿內容匯總,EXCEL教學中經常需要對學生信息進行匯總,利用這個功能可以避免重復的復制和粘貼操作,大大節省了操作的時間,提高了課堂效率。本文利用VBA對學生信息進行初步匯總,并提出身份證號匯總出錯的解決方法。
關鍵詞:VBA;合并工作簿;EXCEL教學;課堂效率
在EXCEL教學中,第一次上課教師一般會收集學生的信息作為今后教學的素材,這樣做的好處是學生對自己的信息比較感興趣,課堂效果較好。假設我要收集學生下列信息,我讓每個學生新建了一個工作簿,每個學生都在sheet1表中完成如下表格,文件名命名為學生的名字,最后提交作業后所有學生作業都在一個公共文件夾下,現在要對這些文件進行匯總,把不同學生的信息匯總到一個工作簿里,以前我們大多是用復制粘貼的方式完成,但是班級人數較多,利用這種方式需要不斷打開和關閉工作簿,非常麻煩,而且有可能重復操作。利用VBA可以輕松地解決這個問題。
一、利用VBA實現信息匯總
新建一個“匯總”工作簿,類型為“啟用宏的工作簿(*.xlsm)”,打開EXCEL,調出開發工具,點擊VB按鈕,插入兩個模塊分別為“模塊1”和“模塊2”,在“模塊1”中輸入如下代碼,并運行。
Sub合并多工作簿及多工作表()
Dim MyPath As String,MyFile As String,i As Integer
Dim Wb As Workbook,arr
Application.ScreenUpdating=False
MyPath=ThisWorkbook.Path
MyFile=Dir(MyPath &”\*.xlsx”)
Do Until MyFile=””
If MyFile<>ThisWorkbook.Name Then
Set Wb=Workbooks.Open(MyPath &”\”& MyFile)
‘For i=1 To Wb.Worksheets.Count
arr=Sheets(1).UsedRange
ThisWorkbook.Sheets(1).Range(“A”& Rows.Count).End(xlUp).Offset(1).Resize(UBound(arr),UBound(arr,2))=arr
‘Next
Wb.Close
End If
MyFile=Dir
Loop
Application.ScreenUpdating=True
End Sub
該模塊的主要作用是將同一個文件夾下的若干工作簿匯總到一個工作簿里,運行后得到匯總后效果如圖:
刪除第一行空行后,從第三行開始,奇數行都是重復標題行,所以,在“模塊2”中輸入如下代碼,并運行。
Public Sub隔行刪除()
m=Application.CountA([a:a])
For r=3 To m/2+2
Rows(r).Delete
Next r
End Sub
運行后得到匯總后的效果:
這樣就快速地匯總好了數據,將匯總后的數據進行保存,并進行后續的處理。
二、使用VBA進行信息匯總需要注意的幾個問題
(1)要匯總的工作簿需在一個文件夾內,凡是與“匯總”工作簿不同名的工作簿都能被匯總。
(2)每個學生的sheet1表中的數據必須從A1單元格開始輸入,B1單元格必須有對應的數據,否則匯總不到。中間不要有空行,數據的列順序盡量保證相同。
(3)在匯總身份證號的時候,如果身份證號是純數字的,即不帶X字樣的,雖然在匯總前已經將數據類型設為文本型了,但是匯總后還是會出現數據變化的情況,最后3位會變成0。解決的辦法是匯總前每個同學在身份證號后統一加上一個字母如Y,匯總后再用函數進行提取。或者如本例所示,在身份證號前6位,中間8位后面分別加上點號,匯總后再分別用left,mid和right函數處理也比較方便。
(4)匯總后的文本型數據如學號,電話,QQ等,會丟失文本屬性,需要用分列的功能將其重新設置為文本類型。
參考文獻:
[1]http://www.51zxw.net/.
作者簡介:
吳秀英(1983—),女,漢族,江西撫州人,本科,研究方向:計算機應用。