好文档 - 专业文书写作范文服务资料分享网站

利用Excel统计分析考试成绩

天下 分享 时间: 加入收藏 我要投稿 点赞

利用Excel统计分析考试成绩

姚上村

摘要 本文通过ScoreAna学校成绩统计分析程序,介绍如何在Excel中制作个性化的自定义工具栏按钮,以及如何快速分析处理大批量的数据等。

关键词 Excel VBA,个性化的工具栏按钮,排名次,算法 一、Excel VBA简介 Excel的应用范围很广,如:建立员工工资表,人事档案管理,股市行情分析等等,它非常适合对小型的数据进行快速分析处理,并生成报表。Excel在微软的Office办公套件中最先支持VBA,从而实现Office应用程序自动化,或创建自定义的解决方案。

打开Excel后,只要按Alt + F11就可以进入VBA集成开发环境。要想快速地熟悉VBA,最好的方法莫过于在Excel中录制一个完成某项任务的宏,然后在集成开发环境中查看该宏的VBA源代码。ScoreAna程序代码有一部分就是在录制宏的基础上修改而成的。

VBA中所有可执行语句都要包含在某个子程序中。这些子程序可以分为三类:一类是Sub过程,如宏,用来完成某个任务;第二类是Function函数,它向调用者返回一个值,如ScoreAna中的Function ClassPlace(cell)返回该学生的班级名次;第三类是事件,如Private Sub Workbook_Open(),当打开工作簿时,会激活该事件子程序,完成特定的任务。

二、个性化的自定义工具栏按钮

我们可以在Excel中自定义工具栏,添加工具栏按钮;通过录制宏,可以获取VBA代码。但按钮上的图形只能选择office自带的按钮。您可能使用过Acrobat的office插件,只要点击一个按钮,就可以将office文档转换成PDF文档~它的按钮当然不是office内置的,真漂亮。如何在工具栏上使用自己制作的按钮,请看

ScoreAna中创建个性化工具栏的过程BuildCustomToolbar()的部分代码: Sub BuildCustomToolbar()

Dim oCmdBar As CommandBar Dim btnNew As CommandBarControl

DeleteToolbar ‘调用DeleteToolbar子过程,如果ScoreAna工具栏存在,先删除它

'生成ScoreAna工具栏 1605692 第1页 共 4页

Set oCmdBar = CommandBars.Add(Name:=\oCmdBar.Visible = True With oCmdBar

'添加“设置参数”按钮

With .Controls.Add(msoControlButton) .Caption = \设置参数\

.OnAction = \ .Tag = .Caption ‘按钮标签

‘.FaceId=80 ‘注释掉,不使用office自带的按钮 ‘从Sheet1工作表复制名为”Picturepara”的图形 Worksheets(\.PasteFace ‘粘贴作为该按钮的图形 End With ……. End With End Sub

然后在Workbook_Open()事件中调用BuildCustomToolbar()过程,就可以象Acrobat插件一样,在打开Excel文档时看到自己的个性化工具栏了~~

Private Sub Workbook_Open() '最大化窗口

Application.WindowState = xlMaximized '停止自动计算,及保存前计算

Application.Calculation = xlCalculationManual Application.CalculateBeforeSave = False '创建自定义工具栏 BuildCustomToolbar End Sub

请注意,Workbook_Open()事件过程要放在“ThisWorkbook”模块中;BuildCustomToolbar()子过程则放在“模块1”或“模块2”等模块中。

三、统计分析学生成绩

包括计算每个学生的班级名次、年级名次,统计每学科平均成绩,各班分数段统计等。这其中的难点是为每个学生排名次。ScoreAna程序通过在工作表中调用函数ClassPlace(cell)和GradePlace(cell),分别得到该生的班级名次和年级名次。

1605692 第2页 共 4页

算法是程序设计的灵魂。ScoreAna通过以下两点改进,使得排名次算法的时间只需要1秒左右:一是将各学生的总成绩读入内存数组再排序,而不是直接对Excel单元格的值进行排序,因为Excel对单元格等对象的大量分析会消耗大量的时间。这也是时间缩减的主要因素。二是排序算法由原来的冒泡排序改为计数排序,使

2得算法的复杂度由原来的O(N)降为O(N)。这样即使是1亿个学生要排名次,也只需1秒。计数排序也使得实现“相同分数的学生并列名次”更简单。以下是ClassPlace(cell)函数的代码:

Function ClassPlace(cell)

Dim sheetname, CellName, i, j, place, cellValue, score, sheetObj, classCur

Static scores(99, 20000) As Integer ‘设置为静态数组,避免重复计算 score = cell.Value

'总分为空或零,不排班级名次

If score = \classCur = classNum(cell) ‘cell所在班级

If classCur < 1 Then ClassPlace = \作表class00,不排名次

'排名次,计数排序算法

'适用于总分为整数或带.5小数的,其它小数部分需要修正算法 ‘最高分不超过20000,0.5,10000

If Not classLW(classCur) Then ‘cell所在班级尚未排名次 Set sheetObj = cell.Parent ‘cell所在工作表 For i = 0 To 20000

scores(classCur, i) = 0 ‘每个分数点(相隔0.5分)的学生数,重置零 Next i

For i = ScoreStartRow To MaxMember + ScoreStartRow - 1 cellValue = sheetObj.Evaluate(totalScoreCol & i).Value '如果出现姓名为空,就意味着本班排名结束

If sheetObj.Range(nameCol & i) = \

scores(classCur, cellValue * 2) = scores(classCur, cellValue * 2) + 1 ‘该分数点学生数加1

Next i place = 1

For i = 20000 To 1 Step -1 ‘确定名次,分数相同者,名次并列 1605692 第3页 共 4页 j = scores(classCur, i) scores(classCur, i) = place place = place + j Next i

classLW(classCur) = True ‘cell所在班级已排好名次 End If '返回名次

ClassPlace = scores(classCur, score * 2) End Function

四、统一工作表的样式。通过模板工作表,配合VBA宏,自动生成班级工作表及其它报表,保证了工作表的样式一致,对版面的调整也更加方便,极大地节省了人力。

参考文献

1(算法导论第二版,Thomas H. Cormen等著,潘金贵等译,机械工业出版社 2(Wrox Excel 2003 VBA Programmers Reference,Paul Kimmel等著,Wiley Publishing,

Inc.

利用Excel统计分析考试成绩

利用Excel统计分析考试成绩姚上村摘要本文通过ScoreAna学校成绩统计分析程序,介绍如何在Excel中制作个性化的自定义工具栏按钮,以及如何快速分析处理大批量的数据等。关键词ExcelVBA,个性化的工具栏按钮,排名次,算法一、ExcelVBA简介Excel的应用范围很广,如:建立员工工资表,人事档案管理
推荐度:
点击下载文档文档为doc格式
28m2i0x4im6j6mw9sjhs44p5c1cp9m00dzs
领取福利

微信扫码领取福利

微信扫码分享