ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 209|回复: 10

成绩统计

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-17 18:19 | 显示全部楼层 |阅读模式
本人有一份成绩,经常要统计,请问这代码怎么写,请各位高手帮忙下,谢谢啦

成绩统计表.zip

12.23 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2024-7-18 08:23 | 显示全部楼层
最关键的条件没有提供。总分多少是优秀、良好 …… ; 单科多少分是优秀、良好……

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-18 09:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
清风竹- 发表于 2024-7-18 08:23
最关键的条件没有提供。总分多少是优秀、良好 …… ; 单科多少分是优秀、良好……

总分
语数英120,物70,道历60,化生地历体50
各率为总分的百分数如下
优秀=〉0.8,良好=〉0.7,及格=〉0.6,低分<=0.3,各科0分及缺考不计入参考人数,总分0分及缺考不计入参考人数

TA的精华主题

TA的得分主题

发表于 2024-7-18 09:48 | 显示全部楼层
本帖最后由 清风竹- 于 2024-7-18 09:54 编辑
清茶一 发表于 2024-7-18 09:28
总分
语数英120,物70,道历60,化生地历体50
各率为总分的百分数如下

总得分的优秀、良好……等。如何计算。是所有科都是优秀,总得分才算优秀吗?

TA的精华主题

TA的得分主题

发表于 2024-7-18 09:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-7-18 10:08 | 显示全部楼层
grf1973 发表于 2024-7-18 09:57
平均分得分率,什么意思

我猜一下,是超过等于平均分人数除以总人数。

TA的精华主题

TA的得分主题

发表于 2024-7-18 14:42 | 显示全部楼层
平均得分率不知规则,请自行添加。。。。
除了标红的要求外基本都实现了。

成绩统计表.zip

40.26 KB, 下载次数: 6

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-18 16:43 | 显示全部楼层
grf1973 发表于 2024-7-18 14:42
平均得分率不知规则,请自行添加。。。。
除了标红的要求外基本都实现了。

平均分率是个人总分/所有参与科目的总分

TA的精华主题

TA的得分主题

发表于 2024-7-19 10:23 | 显示全部楼层
加进去了。。。。。

成绩统计表.zip

28.78 KB, 下载次数: 8

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-19 12:53 | 显示全部楼层
Sub 成绩分析()
Application.ScreenUpdating = False
Dim ar As Variant
Dim brr(), br()
Dim d As Object, dc As Object
Set d = CreateObject("scripting.dictionary")
Set dc = CreateObject("scripting.dictionary")
Set dic = CreateObject("scripting.dictionary")
rr = Array(8, 11, 14, 17, 20, 22)
With Sheets("设置")
    mc = .[b1] & .[b2] & .[c2] & "学年度" & .[b3] & .[b4] & .[b5]
    cr = .Range("e1:o6")
    rs = .Cells(Rows.Count, 1).End(xlUp).Row
    crr = .Range("a7:b" & rs)
End With
For j = 2 To UBound(cr, 2)
    d(cr(1, j)) = j
Next j
For i = 2 To UBound(crr)
    d(crr(i, 1)) = crr(i, 2)
Next i
With Sheets("score")
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    If r < 4 Then MsgBox "成绩表为空!": End
    ar = .Range("a1:p" & r)
End With
With Sheets("成绩分析")
    .UsedRange.Offset(3).UnMerge
    .UsedRange.Offset(3).Font.Bold = False
    .UsedRange.Offset(3).Font.Size = 11
    .UsedRange.Offset(3).Font.ColorIndex = xlAutomatic
    .UsedRange.Offset(3).Borders.LineStyle = 0
    .UsedRange.Offset(3) = Empty
    For i = 4 To UBound(ar, 1)
        If ar(i, 3) <> "" Then
            dic(ar(i, 3)) = dic(ar(i, 3)) + ar(i, 4)
            zf = zf + ar(i, 4)
        End If
    Next i
    For j = 7 To UBound(ar, 2)
        k = 0: dc.RemoveAll
        ReDim br(1 To UBound(ar), 1 To 22)
        Erase brr
        ReDim brr(1 To UBound(ar), 1 To 22)
        brr(1, 1) = "学校全体"
        lh = d(ar(2, j))
        For i = 4 To UBound(ar, 1)
            If ar(i, 4) <> "" Then
                If IsNumeric(ar(i, 4)) Then
                    If ar(i, 4) > 0 Then
                        t = dc(ar(i, 3))
                        If t = "" Then
                            k = k + 1
                            dc(ar(i, 3)) = k
                            t = k
                            br(k, 1) = ar(i, 3) '''班级名称
                            br(k, 2) = d(ar(i, 3)) '''班主任
                        End If
                        br(t, 3) = br(t, 3) + 1 ''参考人数
                        brr(1, 3) = brr(1, 3) + 1 ''参考人数
                        If br(t, 4) = "" Then
                            br(t, 4) = ar(i, j)
                        ElseIf ar(i, j) > br(t, 4) Then
                            br(t, 4) = ar(i, j)
                        End If
                        '''最高分
                        If brr(1, 4) = "" Then
                            brr(1, 4) = ar(i, j)
                        ElseIf ar(i, j) > brr(1, 4) Then
                            brr(1, 4) = ar(i, j)
                        End If
                        '''最高分
                        If br(t, 5) = "" Then
                            br(t, 5) = ar(i, j)
                        ElseIf ar(i, j) < br(t, 5) Then
                            br(t, 5) = ar(i, j)
                        End If
                        '''最低分
                        If brr(1, 5) = "" Then
                            brr(1, 5) = ar(i, j)
                        ElseIf ar(i, j) < brr(1, 5) Then
                            brr(1, 5) = ar(i, j)
                        End If
                        '''最低分
                        br(t, 6) = br(t, 6) + ar(i, j) '''总分
                        brr(1, 6) = brr(1, 6) + ar(i, j) '''总分
                        If ar(i, j) >= cr(3, lh) Then
                            br(t, 9) = br(t, 9) + 1 ''优秀人数
                            brr(1, 9) = brr(1, 9) + 1 ''优秀人数
                        End If
                        If ar(i, j) >= cr(4, lh) Then
                            br(t, 12) = br(t, 12) + 1 ''良好人数
                            brr(1, 12) = brr(1, 12) + 1
                        End If
                        If ar(i, j) >= cr(5, lh) Then
                            br(t, 15) = br(t, 15) + 1 ''及格人数
                            brr(1, 15) = brr(1, 15) + 1
                        End If
                        If ar(i, j) <= cr(6, lh) Then
                            br(t, 18) = br(t, 18) + 1 ''低分人数
                            brr(1, 18) = brr(1, 18) + 1
                        End If
                    End If
                End If
            End If
        Next i
        For i = 1 To k
            br(i, 7) = br(i, 6) / dic(br(i, 1)) ''平均分率
            br(i, 6) = br(i, 6) / br(i, 3) ''平均分
            br(i, 10) = br(i, 9) / br(i, 3) ''优秀率
            br(i, 13) = br(i, 12) / br(i, 3) ''良好率
            br(i, 16) = br(i, 15) / br(i, 3) ''及格率
            br(i, 19) = br(i, 18) / br(i, 3) ''低分率
            br(i, 21) = br(i, 7) * 0.3 + br(i, 10) * 0.1 + br(i, 13) * 0.2 + br(i, 16) * 0.3 + (1 - br(i, 19)) * 10
            '综合率 = 平均分率 * 30 + 优秀率 * 10 + 良好率 * 20 + 及格率 * 30 + (1 - 低分率) * 10
        Next i
        brr(1, 7) = brr(1, 6) / zf
        brr(1, 6) = brr(1, 6) / brr(1, 3)
        brr(1, 10) = brr(1, 9) / brr(1, 3) ''优秀率
        brr(1, 13) = brr(1, 12) / brr(1, 3) ''良好率
        brr(1, 16) = brr(1, 15) / brr(1, 3) ''及格率
        brr(1, 19) = brr(1, 18) / brr(1, 3) ''低分率
        brr(1, 21) = brr(1, 7) * 0.3 + brr(1, 10) * 0.1 + brr(1, 13) * 0.2 + brr(1, 16) * 0.3 + (1 - brr(1, 19)) * 10
        If j = 7 Then
            ws = 1
        Else
            ws = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        End If
        If j > 7 Then .Rows("1:3").Copy .Cells(ws, 1)
        .Cells(ws, 1) = "三率一分" & mc & "-" & ar(2, j)
        .Cells(ws + 3, 1).Resize(1, UBound(brr, 2)) = brr
        .Cells(ws + 4, 1).Resize(k, UBound(br, 2)) = br
        .Cells(ws + 3, 1).Resize(k + 1, UBound(br, 2)).Borders.LineStyle = 1
        For s = 0 To UBound(rr)
            h = rr(s)
            For i = ws + 4 To k + ws + 3
                .Cells(i, h) = Application.Rank(.Cells(i, h - 1), .Range(.Cells(ws + 4, h - 1), .Cells(k + ws + 3, h - 1)))
                If .Cells(i, 19) > .Cells(ws + 3, 19) Then .Cells(i, 19).Font.ColorIndex = 3
            Next i
        Next s
    Next j
End With
Set d = Nothing
Set dc = Nothing
Set dic = Nothing
Application.ScreenUpdating = True
MsgBox "ok!"
End Sub

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-8 08:52 , Processed in 0.037957 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表