一次小小的 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 程序,程序也没做什么优化,算法很简单,就当做是一次小练笔吧^_^

原创粉丝点击