今天介绍一段VBA代码,是对一个学生信息表格进行统计和排名,并对结果表格进行样式设置的功能。它可以用于教育机构、培训机构、企业内部培训等场景,对学生的成绩、学习情况等进行统计和排名,以便于管理者更好地了解每个学生的情况,并针对个体情况做出相应的决策。也可用来帮助初学者了解 VBA 的基本语法和常见操作。
源数据
功能效果
完整代码
Sub CalculateGrade()
Dim i As Integer
Dim total, avg, rank As Double
' 循环处理每个学生
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row ' 从第2行开始到最后一行循环
' 计算总分
Range("F1").Value = "总分" ' 将F1单元格的值设置为“总分”
total = Application.Sum(Range("B" & i & ":E" & i)) ' 计算该行B到E列的总和
Range("F" & i).Value = Format(total, "#.00") ' 将总分格式化为两位小数并赋值到F列
' 计算平均分
Range("G1").Value = "平均分" ' 将G1单元格的值设置为“平均分”
avg = total / 4 ' 计算平均分
Range("G" & i).Value = Format(avg, "#.00") ' 将平均分格式化为两位小数并赋值到G列
' 计算排名
Range("H1").Value = "排名" ' 将H1单元格的值设置为“排名”
rank = Application.WorksheetFunction.rank(avg, Range("G$2:G#34; & Range("A" & Rows.Count).End(xlUp).Row)) ' 计算平均分在G列中的排名
Range("H" & i).Value = rank ' 将排名赋值到H列
Next i
' 按照排名升序排列F列
Range("A1").CurrentRegion.Sort Key1:=Range("H2"), Order1:=xlAscending, Header:=xlYes ' 按照H列的值升序排列当前区域,即将学生信息表按照平均分的升序排列
' 设置结果表格的样式
With Range("A1").CurrentRegion
.Borders.LineStyle = xlContinuous ' 设置单元格边框线为连续线
.Font.Name = "微软雅黑" ' 设置字体为“微软雅黑”
.Font.Size = 12 ' 设置字号为12
' 只修改第一行标题行的样式
With Rows(1)
.Font.Size = 12 ' 设置字号为12
.Font.Bold = True ' 设置字体加粗
.Font.Name = "微软雅黑" ' 设置字体为“微软雅黑”
.ColumnWidth = 10 ' 设置列宽为10
End With
' 修改除标题行外的单元格样式
With .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
.Font.Size = 10 ' 设置字号为10
End With
End With
' 选中A1单元格
Range("A1").Select ' 选中A1单元格
End Sub