一次小小的 Excel 的 VBA 尝试
来源:互联网 发布:gbgb888域名永久获取 编辑:程序博客网 时间:2024/04/30 00:55
最近学校要评奖学金,所以系里面的学生工作办公室就去校教务处拿了全部学生的上学期成绩回来。学校要求是没有挂科的同学才有资格评奖学金,所以我就打算把拿回来的这些学生成绩导入 Access 里面,然后写一些查询就可以找出符合要求的学生并且排名了。
从教务处拿回来的学生成绩 Excel 格式的,本来稍做修改就可以导进数据库里面去了。没想到仔细看了之后发现没那么简单。
这些学生成绩里面不仅包含了正常考试的成绩,也包含了补考的成绩。而正考成绩和补考成绩在这个 Excel 文件里面没有任何区分的标志(都不知道教务处的人是怎么想的),这两行数据里面,除了成绩不同之外,其他的课程号、学号等都相同。这样导入数据库的话,就难区分哪个成绩是补考的哪个是正考的了。
于是,只能在 Excel 里面多建一列“考试性质”,是正考的就赋“1”,是补考的就赋“2”。人工一行一行的看下去,只要有一科是考过两次试的,那么不及格那次肯定是正考的,及格那次就是补考的。如果两次都是不及格的话,不论哪次是正考或者补考的都无所谓了。这样,问题又来了,几千条成绩,一行一行的看要看到什么时候去啊。
没办法,只能编个程序让计算机来帮我干了。幸好某一科的正考成绩和补考成绩是连着的两行,而且不及格的成绩的字是红色的,那么情况就简单多了。代码如下:
Sub FindSomeCourse()
Application.ScreenUpdating = False '禁止程序执行时实时刷新屏幕
i = 2
While i < 1655'这个是成绩的行数
first = Sheet1.Cells(i, 3).Value
second = Sheet1.Cells(i + 1, 3).Value
If first = second Then
'如果两行的课程号相同……我这里的课程号是在第 3 列的
'课程成绩是第 5 列,“考试性质”是第 6 列
If Sheet1.Cells(i, 5).Font.ColorIndex = 3 Then
If Sheet1.Cells(i + 1, 5).Font.ColorIndex = 3 Then
Sheet1.Cells(i, 6).Value = 2
Sheet1.Cells(i + 1, 6).Value = 1
Else
Sheet1.Cells(i, 6).Value = 1
Sheet1.Cells(i + 1, 6).Value = 2
End If
Else
If Sheet1.Cells(i + 1, 5).Font.ColorIndex = 3 Then
Sheet1.Cells(i + 1, 6).Value = 1
Sheet1.Cells(i, 6).Value = 2
End If
End If
i = i + 2
Else
Sheet1.Cells(i, 6).Value = 1
i = i + 1
End If
Debug.Print i '看看进行到第几行了
Wend
MsgBox "ok"
End Sub
第一次写 VBA 程序,程序也没做什么优化,算法很简单,就当做是一次小练笔吧^_^
- 一次小小的 Excel 的 VBA 尝试
- 一次小小的模板尝试
- 一次无聊的尝试...
- 一次小小的项目经验
- 小小的html的尝试,不太好
- 字符驱动第一步----小小的尝试
- swift3.0+GCD小小的尝试
- EXCEL VBA 的潜力
- Excel的VBA
- Excel的VBA学习
- 一次有益的敏捷尝试
- DexClassLoader一次失败的尝试
- 极路由的一次尝试
- zabbix 的一次优化尝试
- 一次小小的上传文件测试
- 对JAVA学习的一次小小总结
- 记一次小小的优化经历
- excel 中VBA的应用.
- 采用mySAP CRM管理OEM相关企业的Design Win
- 第一次 CRACK ME,试手试手~
- 参加本校的 理想杯 程设大赛,有点累
- Linux 启 动 分 析 专 题
- 读《潜入式设备上的Linux系统开发》
- 一次小小的 Excel 的 VBA 尝试
- Java的垃圾回收机制详解和调优
- Very Chat Room
- 影子
- 提高String和StringBuffer性能的技巧
- mysql连接和断开
- StringBuffer帮你减轻Java的负担
- ttt
- 十大Web 2.0攻击向量