如何根据学生各科及总分成绩划分等第
2010-03-16 12:12
519 查看
问题提出的背景:现在实行素质教育后,不允许给学生公布成绩了,只允许以A、B、C、D的形式进行公布,以前都是在VFP中进行,但需要来回的转换格式,很是烦锁,尤其是在转换时,需要一科科的进行数据格式的转换还往往出问题,如果在Excel里就可以直接转换的话,那肯定可以节省很多时间。
问题解决的思路:因为只能有A、B、C、D四个等第,所以可以利用Select Case语句来解决,而且以前最熟悉的是IF语句,现在想知彻底解决条件判断语句的用法。就以这个作为一个例子吧。
首先根据成绩及A、B、C、D四个等第的比例进行等第确认,源程序如下:
Sub 等第确认()
'打开zcj工作表
Dim mycell As Range
Worksheets("zcj").Activate
For i = 1 To 3
For Each mycell In Range(Cells(2, 6 + (i - 1) * 3), Cells(1172, 6 + (i - 1) * 3))
Select Case mycell.Value
Case 1052 To 1171
mycell.Offset(0, 1).Value = "D"
Case 1051 * 0.7 To 1051
mycell.Offset(0, 1).Value = "C"
Case 1051 * 0.3 To 1051 * 0.7
mycell.Offset(0, 1).Value = "B"
Case Else
mycell.Offset(0, 1).Value = "A"
End Select
Next mycell
Next i
ActiveSheet.Copy before:=ActiveSheet
ActiveSheet.Name = "zcj备份"
Worksheets("zcj").Activate
'以下为把所有等第为A、B、C的学生完全删掉,这样只留下等第为D的学生了。
Dim totalR As Integer
totalR = Range("C65536").End(xlUp).Row
For i = totalR To 2 Step -1
If Application.WorksheetFunction.CountIf(Range(Cells(i, 5), Cells(i, 13)), "D") = 0 Then
Range(Cells(i, 1), Cells(i, 1)).EntireRow.Delete
End If
Next i
Range("A1").CurrentRegion.Font.Name = "微软雅黑"
Range("A1").CurrentRegion.Font.Size = 10
End Sub
效果截图如下:
图1 确认完等第后的效果图
图2 把没有D的学生删掉后的效果图
另一方法,源程序如下:
Sub 提取等第为D学生名单()
Dim totalRD As Integer
Dim totalR, i As Integer
Dim mycell As Range
totalRD = 1
Worksheets("等第为D学生名单").Activate
Worksheets("语数外等第公示").Activate
totalR = Range("C65536").End(xlUp).Row
For Each mycell In Range("E2:H1172")
If mycell = "D" Then
mycell.EntireRow.Copy
Worksheets("等第为D学生名单").Activate
totalRD = Range("C65536").End(xlUp).Row
Range(Cells(totalRD + 1, 1), Cells(totalRD + 1, 1)).PasteSpecial xlPasteAll
Application.CutCopyMode = False
Worksheets("语数外等第公示").Activate
End If
Next mycell
'删掉重复值
Worksheets("等第为D学生名单").Activate
totalRD = Range("C65536").End(xlUp).Row
For i = totalRD To 1 Step -1
If Application.WorksheetFunction.CountIf(Range(Cells(1, 2), Cells(totalRD, 2)), Cells(i, 2)) > 1 Then
Range(Cells(i, 2), Cells(i, 2)).EntireRow.Delete
End If
Next i
Range("A1").CurrentRegion.Font.Name = "微软雅黑"
Range("A1").CurrentRegion.Font.Size = 10
End Sub
对比:第2种方法也可以,但显得太麻烦,因为需要做多个工作表,而且会在“等第为D学生名单”中出现多个重复值,不利于数据的严谨性,所以还是第1种方法较科学。
今天你菊子曰了么?
问题解决的思路:因为只能有A、B、C、D四个等第,所以可以利用Select Case语句来解决,而且以前最熟悉的是IF语句,现在想知彻底解决条件判断语句的用法。就以这个作为一个例子吧。
首先根据成绩及A、B、C、D四个等第的比例进行等第确认,源程序如下:
Sub 等第确认()
'打开zcj工作表
Dim mycell As Range
Worksheets("zcj").Activate
For i = 1 To 3
For Each mycell In Range(Cells(2, 6 + (i - 1) * 3), Cells(1172, 6 + (i - 1) * 3))
Select Case mycell.Value
Case 1052 To 1171
mycell.Offset(0, 1).Value = "D"
Case 1051 * 0.7 To 1051
mycell.Offset(0, 1).Value = "C"
Case 1051 * 0.3 To 1051 * 0.7
mycell.Offset(0, 1).Value = "B"
Case Else
mycell.Offset(0, 1).Value = "A"
End Select
Next mycell
Next i
ActiveSheet.Copy before:=ActiveSheet
ActiveSheet.Name = "zcj备份"
Worksheets("zcj").Activate
'以下为把所有等第为A、B、C的学生完全删掉,这样只留下等第为D的学生了。
Dim totalR As Integer
totalR = Range("C65536").End(xlUp).Row
For i = totalR To 2 Step -1
If Application.WorksheetFunction.CountIf(Range(Cells(i, 5), Cells(i, 13)), "D") = 0 Then
Range(Cells(i, 1), Cells(i, 1)).EntireRow.Delete
End If
Next i
Range("A1").CurrentRegion.Font.Name = "微软雅黑"
Range("A1").CurrentRegion.Font.Size = 10
End Sub
效果截图如下:
图1 确认完等第后的效果图
图2 把没有D的学生删掉后的效果图
另一方法,源程序如下:
Sub 提取等第为D学生名单()
Dim totalRD As Integer
Dim totalR, i As Integer
Dim mycell As Range
totalRD = 1
Worksheets("等第为D学生名单").Activate
Worksheets("语数外等第公示").Activate
totalR = Range("C65536").End(xlUp).Row
For Each mycell In Range("E2:H1172")
If mycell = "D" Then
mycell.EntireRow.Copy
Worksheets("等第为D学生名单").Activate
totalRD = Range("C65536").End(xlUp).Row
Range(Cells(totalRD + 1, 1), Cells(totalRD + 1, 1)).PasteSpecial xlPasteAll
Application.CutCopyMode = False
Worksheets("语数外等第公示").Activate
End If
Next mycell
'删掉重复值
Worksheets("等第为D学生名单").Activate
totalRD = Range("C65536").End(xlUp).Row
For i = totalRD To 1 Step -1
If Application.WorksheetFunction.CountIf(Range(Cells(1, 2), Cells(totalRD, 2)), Cells(i, 2)) > 1 Then
Range(Cells(i, 2), Cells(i, 2)).EntireRow.Delete
End If
Next i
Range("A1").CurrentRegion.Font.Name = "微软雅黑"
Range("A1").CurrentRegion.Font.Size = 10
End Sub
对比:第2种方法也可以,但显得太麻烦,因为需要做多个工作表,而且会在“等第为D学生名单”中出现多个重复值,不利于数据的严谨性,所以还是第1种方法较科学。
今天你菊子曰了么?
相关文章推荐
- Sql Server 行转列学习 根据学生表、课程表、学生成绩表统计每个学生的各科成绩和他的总成绩、平均成绩
- 学生各科成绩,平均分,总分的展示
- java中的comparable接口如何根据学生的学号,成绩等多种情况进行定义,然后排序
- 算法:编写程序,根据输入的学生成绩,给出相应的等级,90~100为A
- 在一个长度为10的整型数组里面,保存了班级10个学生的考试成绩。要求编写5个函数,分别实现计算考试的总分,最高分,最低分,平均分和考试成绩降序排序
- 用二维数组,输出有一门以上课程未及格的学生,并打印出所有<60分的分数及各科成绩
- 录入5名学生成绩 按总分排序
- 如何开发一个学生成绩管理糸统(9)
- 统计学生各科成绩,列转行
- 根据类Student的定义,创建五个该类的对象,输出每个学生的信息, 计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。
- 脚本-if 根据学生考试成绩判断学生的优劣成绩
- sql查询出各科成绩最好的学生信息
- 问题二十七:输入3个学生3门课的成绩,计算每个学生的总分和平均分成绩。(用while循环)
- 要求可以根据每个学生的成绩进行由高到低的排序如果成绩相等则按照年龄由低到高排序数据的样式如下张三:19:90|李四:20:90|王五:20:80|赵六:21:100
- 输入一组学生的姓名和成绩,根据成绩降序排名。
- 根据老师编号,统计其所授课程的平均成绩及学生人数。
- (原创)shell 编程:根据从键盘输入的学生成绩,显示相应的成绩标准,也可以同时输入多个成绩,最多为5 个,以空格分隔。
- 第十七周项目六 学生成绩统计-输出学生信息、总分和均分
- 查询每个学生的各科成绩sql语句
- 显示学生各科成绩和总成绩-面试被问到