ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 成绩统计问题。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-17 12:47 | 显示全部楼层 |阅读模式
本帖最后由 dengjq2000 于 2024-7-18 07:30 编辑

哪位大神指导一下,我自己做的成绩统计系统,原来做了语文数学和英语三科的统计表,现在又加了科学和道法的,表册复制后不自动统计科学和道法的成绩(要把所有成绩统计到工作表2统计中去)。表册做好了,现在就是科学和道法的统计表的公式不合适,试了好几次都不行。请大神看一下啊。谢谢了!

新成绩统计系统2222.zip

40.99 KB, 下载次数: 25

TA的精华主题

TA的得分主题

发表于 2024-7-17 12:57 | 显示全部楼层
需要定义名称:
image.png
例如,科学表格这里,公式都要改的
image.png
道法这里一样道理
image.png

TA的精华主题

TA的得分主题

发表于 2024-7-17 13:05 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-17 14:18 | 显示全部楼层
quqiyuan 发表于 2024-7-17 12:57
需要定义名称:

例如,科学表格这里,公式都要改的

能帮我做一下吗,完了发给我

TA的精华主题

TA的得分主题

发表于 2024-7-17 14:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
春风360 发表于 2024-7-17 14:18
能帮我做一下吗,完了发给我

改了下,不过里面的优良率,及格率那些要你自己改咯,由于不知道分数怎么划分,它们跟上面三科应该不一样的,造成了都是0
image.png

新成绩统计系统2222.zip

43.46 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2024-7-17 15:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-7-17 18:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub 成绩分析()
Application.ScreenUpdating = False
Dim ar As Variant
Dim d As Object, dc As Object
Set d = CreateObject("scripting.dictionary")
Set dc = CreateObject("scripting.dictionary")
With Sheets("统计人")
    br = .Range("a2:f6")
    xx = .[c8]
End With
For i = 1 To UBound(br)
    If br(i, 1) <> "" Then
        d(br(i, 1)) = i
    End If
Next i
With Sheets("科任教师")
    rs = .Cells(Rows.Count, 2).End(xlUp).Row
    If rs < 2 Then MsgBox "科任教师表为空!": End
    cr = .Range("a2:f" & rs)
End With
For i = 2 To UBound(cr)
    If cr(i, 1) <> "" Then
        For j = 2 To UBound(cr, 2)
            If cr(1, j) <> "" Then
                zd = cr(i, 1) & "|" & cr(1, j)
                d(zd) = cr(i, j)
            End If
        Next j
    End If
Next i
With Sheets("成绩")
    r = .Cells(Rows.Count, 2).End(xlUp).Row
    If r < 2 Then MsgBox "成绩表为空!": End
    ar = .Range("a1:m" & r)
End With
With Sheets("统计")
    .UsedRange.Offset(3).Clear
    For j = 5 To 9
        k = 0: dc.RemoveAll
        ReDim arr(1 To UBound(ar), 1 To 17)
        For i = 2 To UBound(ar)
            If ar(i, 2) <> "" Then
                t = dc(ar(i, 2))
                If t = "" Then
                    k = k + 1
                    dc(ar(i, 2)) = k
                    t = k
                    arr(k, 1) = ar(i, 2)
                End If
                arr(t, 2) = arr(t, 2) + 1
                If ar(i, j) <> "" Then
                    If IsNumeric(ar(i, j)) Then
                        If ar(i, j) > 0 Then
                            arr(t, 3) = arr(t, 3) + 1 '''计算参考人数
                            If ar(i, j) >= 80 Then
                                arr(t, 4) = arr(t, 4) + 1 '''计算优良人数
                            End If
                            If ar(i, j) >= 60 Then
                                arr(t, 6) = arr(t, 6) + 1 '''计算及格人数
                            End If
                            If ar(i, j) <= 35 Then
                                arr(t, 8) = arr(t, 8) + 1 '''计算过差人数
                            End If
                        End If
                        arr(t, 12) = arr(t, 12) + ar(i, j) '''计算总分
                        If arr(t, 10) = "" Then
                            arr(t, 10) = ar(i, j)
                        Else
                            If ar(i, j) > arr(t, 10) Then
                                arr(t, 10) = ar(i, j)
                            End If
                        End If ''计算最高分
                        If arr(t, 11) = "" Then
                            arr(t, 11) = ar(i, j)
                        Else
                            If ar(i, j) < arr(t, 11) Then
                                arr(t, 11) = ar(i, j)
                            End If
                        End If ''计算最低分
                    End If
                End If
            End If
        Next i
        For i = 1 To k
            If arr(i, 4) = 0 Then
                arr(i, 5) = 0
            Else
                arr(i, 5) = arr(i, 4) / arr(i, 3) * 100
            End If '''优良率
            If arr(i, 6) = 0 Then
                arr(i, 7) = 0
            Else
                arr(i, 7) = arr(i, 6) / arr(i, 3) * 100
            End If '''及格率
            If arr(i, 8) = 0 Then
                arr(i, 9) = 0
            Else
                arr(i, 9) = arr(i, 8) / arr(i, 3) * 100
            End If '''过差率
            arr(i, 13) = arr(i, 12) / arr(i, 3) ''平均分
            zf = arr(i, 1) & "|" & ar(1, j)
            arr(i, 14) = d(zf)
            arr(i, 15) = ((arr(i, 5) + arr(i, 9) + 100) / 2 + arr(i, 7) + arr(i, 13)) / 3
        Next i
        xh = d(ar(1, j))
        If j = 5 Then
            ws = 1
        Else
            ws = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        End If
        If j > 5 Then .Rows("1:3").Copy .Cells(ws, 1)
        .Cells(ws, 1) = xx & "   " & ar(1, j) & "   考试成绩统计表"
        .Cells(ws + 3, 1).Resize(k, UBound(arr, 2)) = arr
        .Cells(ws + 3, 1).Resize(k + 2, UBound(arr, 2)).Borders.LineStyle = 1
        .Cells(k + ws + 4, 1) = "学区汇总"
        For jj = 2 To 12
            If jj <> 5 And jj <> 7 And jj <> 9 And jj <> 10 And jj <> 11 Then
                .Cells(k + ws + 4, jj) = Application.Sum(Application.Index(arr, 0, jj))
            End If
        Next jj
        .Cells(k + ws + 4, 10) = Application.Max(Application.Index(arr, 0, 10))
        .Cells(k + ws + 4, 11) = Application.Min(Application.Index(arr, 0, 11))
         For jj = 5 To 9
            If jj <> 6 And jj <> 8 Then
                .Cells(k + ws + 4, jj) = .Cells(k + 1 + 4, jj - 1) / .Cells(k + 1 + 4, 3) * 100
            End If
        Next jj
        .Cells(k + ws + 4, 13) = .Cells(k + ws + 4, 12) / .Cells(k + ws + 4, 3)
        .Cells(k + ws + 5, 9) = "组长:"
        .Cells(k + ws + 5, 10) = br(xh, 3)
        .Cells(k + ws + 5, 11) = "统计人:"
        .Cells(k + ws + 5, 12) = br(xh, 5)
        .Cells(k + ws + 5, 13) = br(xh, 6)
        .Cells(k + ws + 5, 1) = "综合指数z=[(100+优良率-过差率)/2+及格率+平均分]/3。"
        For i = ws + 3 To k + ws + 2
            .Cells(i, 16) = Application.Rank(.Cells(i, 15), .Range("o" & ws + 3 & ":o" & k + ws + 3))
        Next i
    Next j
    .Activate
End With
Application.ScreenUpdating = True
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2024-7-17 18:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
vba完成的,供参考
新成绩统计系统2222.rar (51.65 KB, 下载次数: 4)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-17 23:20 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-17 23:21 | 显示全部楼层
quqiyuan 发表于 2024-7-17 14:48
改了下,不过里面的优良率,及格率那些要你自己改咯,由于不知道分数怎么划分,它们跟上面三科应该不一样 ...

非常感谢!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-21 22:20 , Processed in 0.054046 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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