如何计算各班各班平均分(指定任意名次)

本文介绍了一种使用VBA实现的成绩分析方法,主要针对班级中参加考试的学生计算各科及总分的平均分,并通过特定算法排除未参加考试的学生数据,确保计算结果的准确性。

成绩分析还有一个问题就是计算平均分。考虑到各班均有不参加考试的学生,为了公平起见,往往是取前多少名(比如一个班有50名学生,往往都是取前40名或前45名的学生计算平均分)进行计算。现在就来实现这个问题。

源程序如下:

Sub 计算各班各科及总分的平均分()
    Dim rs(25), i, j, k As Integer
    Dim totalR As Integer
    Dim pj(25) As Double
    Dim km(9) As String
    km(1) = "语文"
    km(2) = "数学"
    km(3) = "外语"
    km(4) = "物理"
    km(5) = "化学"
    km(6) = "生物"
    km(7) = "理综"
    km(8) = "能力"
    km(9) = "总分"
    Worksheets("sheet1").Activate
    totalR = Range("A65536").End(xlUp).Row
    k = 0
    For i = 1 To 9
        For j = 1 To 25
            Worksheets("sheet1").Activate
            rs(j) = Application.WorksheetFunction.CountIf(Range(Cells(2, 1), Cells(totalR, 1)), Trim(Str(j)))
            k = k + rs(j)
            If rs(j) <> 0 Then
                pj(j) = Application.WorksheetFunction.Average(Range(Cells(k - rs(j) + 2, i + 3), Cells(k + 1 - 5, i + 3)))
            Else
                pj(j) = 0
            End If
            Debug.Print Trim(Str(j)) & "班" & km(i) & "前" & Trim(Str(rs(j) - 5)) & "平均分为:" & pj(j)
            Worksheets("sheet3").Activate
            Range(Cells(j + 1, i + 1), Cells(j + 1, i + 1)).Value = pj(j)
        Next j
        k = 0
    Next i
    Worksheets("sheet3").Activate '删除文科班,利用文科班所在行的各段人数均为0,那么可以按行统计单元格为0的个数,若等于9(科目数),则必为文科班,即可以把该行删掉.
    totalR = Range("A65536").End(xlUp).Row
    totalC = Range("IV1").End(xlToLeft).Column
    Debug.Print totalC
    For i = totalR To 1 Step -1 '若从第一行开始,一旦出现了删除结果,会导致行数不对.易出现漏删现象.
        If Application.WorksheetFunction.CountIf(Range(Cells(i, 1), Cells(i, totalC)), "0") = 9 Then
            Range(Cells(i, 1), Cells(i, totalC)).EntireRow.Delete
        End If
    Next i
End Sub

最终效果如下图所示:

image

最头疼的问题基本上已经解决了.下次考试是不是就要试试了?希望会成功!!!

菊子曰 今天你 菊子曰了么?

转载于:https://www.cnblogs.com/xiehui/archive/2010/03/13/2004319.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值