浅谈VBA在EXCEL教学中的作用
2018-01-17吴秀英
摘 要:利用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—),女,汉族,江西抚州人,本科,研究方向:计算机应用。