标题 | 基于VBA的学生成绩数据重排功能的设计与实现 |
范文 | 罗良夫+张丽 摘要:目前教务系统的学生成绩一般采用Excel文件进行保存,且成绩往往是按课程进行录入,每行数据只有学生一门课程的成绩信息,导致学生的成绩信息分布的很分散,为了能够在一行中显示一名学生的所有成绩信息,该文采用Excel自带的VBA设计器,开发了一个学生成绩数据重排功能,该功能可以快速对学生成绩信息进行横向重排,使教务管理人员能够直观地观察到学生的整体学习情况,并且对中途转入或转出的同学也可以进行成绩统计。 关键词:Excel;VBA;数据重排 中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)35-0129-02 1 VBA概述 随着计算机技术的飞速发展,办公软件已经成为人们工作生活的重要工具,其中office系列软件是目前主流的办公软件,office软件已经集成强大的办公类功能,但有些自定义的功能,通过office集成的功能不能直接实现,这时我们需要借助VBA来进行设计实现。 VBA(Visual Basic for Applications)是微软开发出来的一种宏语言,是在桌面应用程序中执行通用的自动化(OLE)任务的编程语言,用来扩展Windows的应用程序功能,特别是Microsoft Office软件。VBA是Office的内置工具,主要包括开发环境及开发语言两部分。VBA能够对Office文档中的属性与状态进行识别[1],实际上VBA是一种用于开发应用程序的Basic语言,VBA是基于VB发展而来的,VBA与VB有着相似的语法结构,VBA是Office系列软件集成的功能,所以不能像VB一样生成独立的应用程序,VBA需要基于一个主应用程序,VBA通过对象库来控制应用程序,所以只要提供了对象库的应用程序都可以使用VBA[2],比如Excel、Word、Powerpoint。 2 Excel VBA常用功能介绍 本文主要对学生成绩的Excel文件进行数据处理,以便教务处或老师对学生的学习情况有一个全面的了解[5]。Excel VBA是内嵌于Excel的程序开发语言,在Excel中可运行VB程序完成较复杂的工作,为了解决学生成绩的重排问题,需要使用以下功能: 1) 打开VBA代码编辑器 方法一:选择开发工具选项卡,单击Visual Basic按钮 方法二:用鼠标右键单击工作表标签 ,在弹出的菜单中选择查看代码选项 方法三:按下快捷键Alt+F11 2) 创建事件过程 打开VBA代码编辑器后,在工程资源管理器窗口中,双击需要编程的工作表名,在右侧的代码窗口中,首先在对象下拉列表框中选择过程类型,本文需要对工作表操作,所以选择worksheet类型,然后在右侧事件窗口中选择事件BeforeDoubleClick。 3) 单元格的选择 对于单个单元格的选择,可以使用工作表标签名(行标,列标)的方法获取单元格的数据,其中行标与列标均采用数字形式,且均从数字1开始编号,工作表中列标对应数字1。 对于连续的多个单元格范围,可以使用Range(“起始单元格坐标,结束单元格坐标”),其中起始单元格对应于范围中左上角的单元格,结束单元格对应于范围中右下角的单元格,坐标中行列采用数字,列标采用字母形式。 4) 判断单元格是否为空 Excel数据中往往会出现空白单元格,可以使用IsEmpty(单元格地址)进行判断,如果指定单元格内容为0、空字符串时函数返回true,否则函数返回false。 对于空白单元格,还可以使用表达式(单元格=0)进行判断,单元格内容为空、0、空字符串时结果为true,否则计算结果为false。 5) 删除单元格内容 VBA中需要删除Excel内容时,可以使用对象.delete()函数实现,其中对象可以是若干行rows(i)、若干列columns(i)、单元格范围range(单元格范围)、某个单元格cell(行标列标)。 3 数据重排功能算法的介绍 目前大多数教务系统的学生成绩数据存储在Excel中,由于学生成绩主要是按课程进行录入保存的,导致学生各门课程成绩分布的非常散,如果想查询某名学生所有的课程成绩时非常的不方便。 为了能够方便地查询某名学生的所有课程成绩,本文采用Excel的VBA技术对数据进行重排,使按课程排列的成绩信息,变成按学生排列的成绩信息,本功能的实现主要分为以下两个阶段: 1) 遍历成绩Excel数据表,对每一条成绩记录进行处理; 2) 从每条被处理记录的下一条记录开始,比较学号字段是否相同; 4) 如果值相同的话,则将成绩与课程名添加到当前记录的后面,并将学号值改成-1; 5) 继续往下判断每一条成绩记录,直到数据表末尾; 6) 再次遍历成绩Excel数据表,遇到学號值为-1的记录进行删除。 4 数据重排功能关键代码 1) 学生成绩数据的添加 i = 2 While (Not IsEmpty(Sheet1.Cells(i, 1))) j = i + 1 k = 7 While (Not IsEmpty(Sheet1.Cells(j, 1))) If (Sheet1.Cells(i, 1) = Sheet1.Cells(j, 1) And Sheet1.Cells(j, 1) <> -1) Then Sheet1.Cells(i, k) = Sheet1.Cells(j, 3) Sheet1.Cells(i, k + 1) = Sheet1.Cells(j, 5) Sheet1.Cells(1, k) = "总评成绩" Sheet1.Cells(1, k + 1) = "课程名称" Sheet1.Cells(j, 1) = -1 k = k + 2 End If j = j + 1 Wend i = i + 1 Wend 2) 删除重复的学生成绩 i = 1 While (Not IsEmpty(Sheet1.Cells(i, 1))) If (Sheet1.Cells(i, 1) = -1) Then Sheet1.Rows(i).Delete Else i = i + 1 End If Wend 5 结束语 目前教务系统中的学生成绩老师按照课程进行存储,不能直观的了解学生所有课程的学习情况,为了解决这一问题,本文采用Excel自带的VBA技术,将纵向排列的课程成绩列表,改变成横向的学生成绩分布,且该功能能兼容了转专业同学的情况。 参考文献: [1] 唐学军. VBA的OFFICE操作题自动批阅技术的实现[J]. 软件, 2014(2). [2] 李晓玫. Excel中的VBA程序设计[J]. 四川师范大学学报, 2004(7). [3] 李小遐. Excel VBA在办公自动化中的应用[J]. 电子测试, 2014(11x):105-106. [4] 张金沙. 基于VBA成绩自动上传系统的开发[J].电脑知识与技术,2016(11). [5] 高世萍. 基于Excel函数及Excel VBA的成绩分析[J]. 智能计算机与应用, 2011(1):18-19. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。