基于VBA的学生成绩数据重排功能的设计与实现

2018-01-06 01:04罗良夫张丽
电脑知识与技术 2017年35期

罗良夫+张丽

摘要:目前教务系统的学生成绩一般采用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.