
学生学业水平评价数据
中期教学质量监测过后,都会对一些表现突出的优秀学生进行表彰奖励。对于一些学生人数较多的县城学校,一个年级的一次奖励,授奖人次多达几百,尤其是三好学生、合格生人数最多,统计起来费时费力。
以前,总是用Excel的中函数来挑选三好、合格学生的。然而写函数,由于有时涉及的参数和括号较多,一个函数语句通常要写多遍才能写正确。况且这次统计完毕后,等到下次使用时,因为科目的变化等因素,又要重新编写函数。有时想着找到以前统计了的表格来复制公式,但由于时间跨度大,表格存储的名称和位置都不能被准确回忆。
还是用VBA编写个小程序来统计三好、合格学生吧!

VBA编程界面

成功统计后的效果图
通过上图可以看出,三好学生、合格学生均已按班级统计到了Excel的两列,后续就直接可以用Word中的邮件合并来打印奖状了。

快速生成三好、合格奖励学生名单VBA代码
Sub CheckStu()Dim PassStu(1000, 20) As StringDim BestStu(1000, 20) As StringErase PassStuErase BestStuDim rng As RangeFor Each rng In Sheets("年级数据").UsedRangeIf rng.Value = "班级" ThenClass_row = rng.RowClass_col = rng.ColumnEnd IfIf rng.Value = "姓名" ThenName_row = rng.RowName_col = rng.ColumnEnd IfIf rng.Value = "语文" ThenChinese_row = rng.RowChinese_col = rng.ColumnEnd IfIf rng.Value = "总分" ThenTotle_row = rng.RowTotle_col = rng.ColumnEnd IfNexti = Chinese_row + 1j = Chinese_colm = 0n = 0Do While Sheets("年级数据").Cells(i, j - 1) <> ""PassSub = 0BestSub = 0For k = j To Totle_col - 1If Sheets("年级数据").Cells(i, k) >= 80 Then BestSub = BestSub + 1NextIf BestSub = Totle_col - j Thenn = n + 1BestStu(n, 1) = Sheets("年级数据").Cells(i, Class_col)BestStu(n, 2) = Sheets("年级数据").Cells(i, Name_col)End IfFor k = j To Totle_col - 1If Sheets("年级数据").Cells(i, k) >= 60 Then PassSub = PassSub + 1NextIf PassSub = Totle_col - j And PassSub <> BestSub Thenm = m + 1PassStu(m, 1) = Sheets("年级数据").Cells(i, Class_col)PassStu(m, 2) = Sheets("年级数据").Cells(i, Name_col)End Ifi = i + 1Loopp = 2q = 2For b = 1 To 20For a = 1 To mIf CnToNumber(PassStu(a, 1)) = b ThenSheets("三好合格生").Cells(p, 3) = bSheets("三好合格生").Cells(p, 4) = PassStu(a, 2)p = p + 1End IfNextNextFor b = 1 To 20For a = 1 To nIf CnToNumber(BestStu(a, 1)) = b ThenSheets("三好合格生").Cells(q, 1) = bSheets("三好合格生").Cells(q, 2) = BestStu(a, 2)q = q + 1End IfNextNextWith Sheets("三好合格生").Range(Cells(2, 1), Cells(m, 4)).Font.Name = "宋体".Font.Size = 10.HorizontalAlignment = xlCenter.VerticalAlignment = xlCenterEnd WithEnd Sub
清除数据操作VBA代码
Sub ClearDate()Sheets("三好合格生").Cells.ClearContentsSheets("三好合格生").Cells(1, 3) = "班级"Sheets("三好合格生").Cells(1, 4) = "学习之星"Sheets("三好合格生").Cells(1, 1) = "班级"Sheets("三好合格生").Cells(1, 2) = "三好学生"With Sheets("三好合格生").Range(Cells(1, 1), Cells(1, 4)).Font.Name = "黑体".Font.Size = 10.HorizontalAlignment = xlCenter.VerticalAlignment = xlCenterEnd WithEnd Sub
通过以上代码,不到1秒钟,全年级乃至全校的三好学生、合格学生均被统计,这才是效率!
编程不易,且用且珍惜!
作者:Longefieder,西北某中学一名普通物理老师。在物理教学研究的同时,集一线管理者、班主任及学科老师的需求,致力于教学小程序的编写。截至目前,已成功编写VBA小程序20余款,Python程序8款。
感谢观看
2024.05.01


