加上注释 就更清晰明了 每句代码的意义
Sub TestSub()
arr = Sheets("学生成绩").UsedRange
With Sheets("七年总分")
优秀分 = .[g2]
及格分 = .[i2]
Dim brr(1 To 1000, 1 To 40)
a = [{660,650,640,630,620,610,600,590,580,570,560,550,540,530,520,510,500,480,460,440,420,400,380,360,340,320,300}]
For i = 4 To UBound(arr)
If arr(i, 1) <> 学校名 Then
n = n + 1
brr(n, 1) = arr(i, 1) '学校
brr(n, 11) = arr(i, 12) '最高分
brr(n, 12) = IIf(arr(i, 12) = "", 1000, arr(i, 12)) '最低分
学校名 = arr(i, 1)
End If
brr(n, 2) = brr(n, 2) + 1 '应考人数
If arr(i, 12) <> "" Then
brr(n, 3) = brr(n, 3) + 1 '参考人数
brr(n, 4) = brr(n, 3) / brr(n, 2) '参考率
brr(n, 5) = brr(n, 5) + arr(i, 12) '参考总分汇总
brr(n, 6) = Round(brr(n, 5) / brr(n, 3), 2) '平均分
If arr(i, 12) >= 及格分 Then
brr(n, 9) = brr(n, 9) + 1 '及格人数
brr(n, 10) = brr(n, 9) / brr(n, 3) '及格率
End If
If arr(i, 12) >= 优秀分 Then
brr(n, 7) = brr(n, 7) + 1 '优秀人数
brr(n, 8) = brr(n, 7) / brr(n, 3) '优秀率
End If
If arr(i, 12) > brr(n, 11) Then
brr(n, 11) = arr(i, 12) '更新最高分
End If
If arr(i, 12) < brr(n, 12) Then
brr(n, 12) = arr(i, 12) '更新最低分
End If
For j = 1 To UBound(a)
If arr(i, 12) >= a(j) Then
brr(n, j + 12) = brr(n, j + 12) + 1 '计算各个分数段人数
End If
Next
If arr(i, 12) < 300 Then
brr(n, 40) = brr(n, 40) + 1 '计算300分以下人数
End If
End If
Next
.[a4].Resize(n, 40) = brr
End With
End Sub
|