APP下载

基于Excel VBA的多考场电子成绩自动统计

2016-07-04陆娇娇

电脑知识与技术 2016年15期

陆娇娇

摘要: 随着计算机技术的飞速发展,高校本科课程考核方式的改革,诸多高校已从传统的纸质试卷考核转为无纸化考核,减少了教师工作量,极大地提高了教师的工作效率。然而,若要对一门课程多考场的许多Excel表格中的成绩进行相关统计,全靠人工手动计算不仅耗时耗力,而且还容易出错。为此,利用Excel VBA方便、灵活、功能强大等特点实现多张表格成绩的自动整合与统计,简化了教师的工作,提高了效率。

关键词:Excel VBA;电子成绩;自动统计

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2016)15-0218-02

1 引言

在高校日常教学中,课程考核占据十分重要的地位,是教学中必不可少的环节,根据考核可以检查课程制定的目标是否实现了教育目的,可以准确地判断出学生掌握课程的程度,以方便课程教学设计的有效改进[1]。鉴于传统纸质试卷考核的出卷、阅卷、统计分析成绩工作量大等诸多不足,许多高校采用无纸化上机考核方式,全部计算机阅卷,减轻了教师的工作[2]。然而,对于像大学计算机这种全校性质的公共课程的考核,因为人数较多,机房有限,机器数量有限,往往组织一场考试是不够的,需要组织多场考试,而每一场考试后都会生成一份本次考试的电子成绩。若想了解所有考生本次考试的情况,并对所有学生的各分数段的人数进行统计分析,需要将各个考场的数据进行整合。如果Excel表格的数量不多,人工统计无妨;如果数量较多,完全手工统计,不仅耗时耗力,而且易出错。

为了解决上述问题,将教师从繁重的手工劳动中解放出来,可采用Excel作为系统编写工具,Excel 自带的系统开发工具VBA(Visual Basic for Applicatio)方便、灵活、功能强大等特点,可以直接对Excel对象进行编程[3],实现多张电子表格成绩的自动整合,大大简化了教师的工作,提高了其工作效率。

2 电子成绩原始数据收集

2.1 原始数据收集

由于各高校采用无纸化考核的工具不同,因此每一次考试产生的电子成绩的文件类型也可能不同,可能是.txt,.xls/x或.doc/x等不同类型的文件。本文编写的程序只针对.xlsx格式的文件,若考试成绩的文件类型非.xlsx格式,需要将成绩数据保存在.xlsx格式的文件中。

2.2 数据预处理

新建Excel工作表,将文件类型改为xlsb格式的文件,取名为“整合各表工具”。将各考场的excel成绩表以及xlsb文件放到同一路径下,xlsb格式的文件中会呈现具体的代码。

3 各考场成绩的统计

3.1 用VBA代码实现各表的整合

打开.xlsb格式的文件,按快捷键Alt+F11打开编写代码的环境,插入模块,在模块中编写代码,具体代码如下:

Sub 整合各表()

thispath = ThisWorkbook.Path'指当前工作薄的路径

Dim SAKfile As String定义程序执行时读取当前表的文件名

SAKfile = Dir(thispath & "\*.xlsx")文件名获取的方式是当前路径下.xlsx格式的文件名

Do While SAKfile <> "" 判断文件名不为空的时候执行循环

If SAKfile <> ThisWorkbook.Name Then

Dim m As Long

Set SAK = Workbooks.Open(thispath & "\" & SAKfile)顺次打开当前路径下.xlsx格式的文件

Set SAKsheet = SAK.Worksheets(1)

m = SAKsheet.Range("A1048576").End(xlUp).Row 该变量为打开的表中最后一行的行数

SBKtemp = ThisWorkbook.Worksheets(1).Range("A1048576").End(xlUp).Row 该变量为当前写程序的工作薄的第一张工作表中最后一行的行数

SAKsheet.Range("a2:d" & m).Copy ‘复制各考场的成绩数据

ThisWorkbook.Worksheets(1).Range("a" & (SBKtemp + 1) & ":d" & (SBKtemp + m - 1)).PasteSpecial (xlPasteValues) 粘贴到汇总表中

Application.CutCopyMode = False ‘清空剪贴板中的数据

ThisWorkbook.Saved = True ‘保存程序文件

SAK.Close 关闭打开的excel表

End If

SAKfile = Dir

Loop

End Sub

代码编写完之后,在代码窗口按F5执行程序,或点击视图→宏,执行即可。

3.2 统计各分数段的人数

根据上述整合数据的结果,可以使用Frequency()函数快速统计各分数段的人数。首先确定各分数段,然后确定间隔值(区间的上限),最后插入Frequency()函数,选中结果区域,在编辑栏处按快捷键Ctrl+shift+enter。以某高校入学考试成绩为样本,统计结果如表1所示。

4 结束语

本文以无纸化考核软件导出的Excel形式的成绩表为例,采用Excel VBA实现对各个考场成绩数据的整合,解决了教师手工整合各表的繁琐问题,极大地减轻了教师工作的负担,大大提高了教师的工作效率,基本取得了预期的效果。

该程序虽然极大程度地减轻了教师的工作量,尤其对多数据表的自动整合有很好的使用价值。但是仍有不足的地方需要改进,如前期数据的预处理能否用程序自动实现文件类型的转换,对于各分数段人数的统计,本文采用函数实现,尽管也很方便,但是否可将该部分用程序实现,进一步简化教师的工作,能否做出人性化的界面,这需要开发人员进一步研究VBA更深层次的用途。

参考文献:

[1] 张芸,王继东.基于Excel和VBA的试卷生成及评分系统[J].西昌学院学报(自然科学版), 2014(3):67-70.

[2] 李旭东.基于教务系统表格及Excel VBA的学生平时成绩换算研究与实现[J].中国教育信息化·基础教育,2014(20):81-84.

[3] 钱建明.EXCEL VBA在考场编排中的设计与实现[J].中国教育信息化·基础教育,2014(7):65-69.

[4] 郑杰,周晓宏.基于VBA的辅助排课系统的实现[J].现代计算机(专业版),2014(24):67-70.