ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 辛玛

[已解决] 这样的高难度成绩分析可能只有求助老师们了

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-7-20 20:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
班级排名代码稍微改一下就可以统计学校排名。
  1. Sub test5()
  2.   Dim r%, i%
  3.   Dim arr, brr
  4.   Dim d As Object
  5.   Application.ScreenUpdating = False
  6.   Application.DisplayAlerts = False
  7.   Set d = CreateObject("scripting.dictionary")
  8.   Set d1 = CreateObject("scripting.dictionary")
  9.   Set d2 = CreateObject("scripting.dictionary")
  10.   Call pub
  11.   For Each ws In Worksheets(Array("七年级", "八年级", "九年级"))
  12.     With ws
  13.       Set d(ws.Name) = CreateObject("scripting.dictionary")
  14.       r = .Cells(.Rows.Count, 1).End(xlUp).Row
  15.       c = .Cells(2, .Columns.Count).End(xlToLeft).Column
  16.       d1(ws.Name) = .Range("e2").Resize(1, c - 4)
  17.       arr = .Range("a2").Resize(r - 1, c + 1)
  18.       arr(1, UBound(arr, 2)) = "全科"
  19.       For i = 2 To UBound(arr)
  20.         For j = 5 To UBound(arr, 2) - 1
  21.           arr(i, j) = Val(arr(i, j))
  22.           arr(i, UBound(arr, 2)) = arr(i, UBound(arr, 2)) + arr(i, j)
  23.         Next
  24.       Next
  25.       
  26.       ls = 8
  27.       For i = 2 To UBound(arr)
  28.         bj = arr(i, 1)
  29.         If Not d(ws.Name).exists(bj) Then
  30.           ReDim brr(1 To ls)
  31.           brr(1) = bj
  32.         Else
  33.           brr = d(ws.Name)(bj)
  34.         End If
  35.         brr(2) = brr(2) + 1
  36.         jgkm = 0
  37.         yxkm = 0
  38.         For j = 5 To UBound(arr, 2) - 1
  39.           If Len(arr(i, j)) <> 0 Then
  40.             brr(3) = brr(3) + arr(i, j)
  41.           End If
  42.           If d_3f.exists(ws.Name) Then
  43.             If d_3f(ws.Name).exists(arr(1, j)) Then
  44.               If arr(i, j) >= d_3f(ws.Name)(arr(1, j))("及格分") Then
  45.                 jgkm = jgkm + 1
  46.               End If
  47.             End If
  48.             If InStr("语文数学英语物理", arr(1, j)) <> 0 Then
  49.               If d_3f(ws.Name).exists(arr(1, j)) Then
  50.                 If arr(i, j) >= d_3f(ws.Name)(arr(1, j))("优秀分") Then
  51.                   yxkm = yxkm + 1
  52.                 End If
  53.               End If
  54.             End If
  55.           End If
  56.         Next
  57.         If jgkm = UBound(arr, 2) - 5 Then
  58.           brr(4) = brr(4) + 1
  59.         End If
  60.         If yxkm = IIf(ws.Name = "七年级", 3, 4) Then
  61.           brr(6) = brr(6) + 1
  62.         End If
  63.         If d_3f.exists(ws.Name) Then
  64.           If d_3f(ws.Name).exists("全科") Then
  65.             If arr(i, UBound(arr, 2)) >= d_3f(ws.Name)("全科")("关爱分") Then
  66.               brr(5) = brr(5) + 1
  67.             End If
  68.           End If
  69.         End If
  70.         d(ws.Name)(bj) = brr
  71.       Next
  72.     End With
  73.   Next
  74.   On Error Resume Next
  75.   Worksheets("学校排名").Delete
  76.   On Error GoTo 0
  77.   Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count))
  78.   With ws
  79.     .Name = "学校排名"
  80.     With .Range("a1")
  81.       .Value = "学校排名"
  82.       .Resize(1, 24).Merge
  83.       With .Font
  84.         .Name = "微软雅黑"
  85.         .Size = 18
  86.       End With
  87.     End With
  88.     n = 1
  89.     For Each aa In d.keys
  90.       d2.RemoveAll
  91.       bt = d1(aa)
  92.       With .Cells(2, n)
  93.         .Value = aa
  94.         .Resize(1, 8).Merge
  95.       End With
  96.       .Cells(3, n).Resize(1, 8) = Array("学校班级", "与考" & vbLf & "人数", "平均" & vbLf & "分", "全科" & vbLf & "合格率", "关爱" & vbLf & "率", IIf(aa = "七年级", "三科", "四科") & vbLf & "优秀率", "四率" & vbLf & "合计", "排名")
  97.       ReDim crr(1 To d(aa).Count, 1 To 8)
  98.       ReDim drr(1 To 8)
  99.       drr(1) = "区平均"
  100.       m = 0
  101.       For Each bb In d(aa).keys
  102.         brr = d(aa)(bb)
  103.         m = m + 1
  104.         For j = 1 To UBound(brr)
  105.           crr(m, j) = brr(j)
  106.         Next
  107.         For j = 2 To 6
  108.           drr(j) = drr(j) + brr(j)
  109.         Next
  110.       Next
  111.       For i = 1 To UBound(crr)
  112.         If Len(crr(i, 2)) <> 0 And crr(i, 2) <> 0 Then
  113.           crr(i, 3) = Round(crr(i, 3) / crr(i, 2) / UBound(bt, 2), 2)
  114.           crr(i, 4) = Round(crr(i, 4) / crr(i, 2), 4)
  115.           crr(i, 5) = Round(crr(i, 5) / crr(i, 2), 4)
  116.           crr(i, 6) = Round(crr(i, 6) / crr(i, 2), 4)
  117.           crr(i, 7) = Round(crr(i, 3) * 0.3 + crr(i, 4) * 0.3 * 100 + crr(i, 5) * 0.2 * 100 + crr(i, 6) * 0.2 * 100, 2)
  118.           d2(crr(i, 7)) = d2(crr(i, 7)) + 1
  119.         End If
  120.       Next
  121.       nn = 1
  122.       kk = d2.keys
  123.       For k = 0 To UBound(kk)
  124.         mm = Application.Large(kk, k + 1)
  125.         ss = d2(mm)
  126.         d2(mm) = nn
  127.         nn = nn + ss
  128.       Next
  129.       For i = 1 To UBound(crr)
  130.         If Len(crr(i, 7)) <> 0 Then
  131.           crr(i, 8) = d2(crr(i, 7))
  132.         End If
  133.       Next
  134.       If Len(drr(2)) <> 0 And drr(2) <> 0 Then
  135.         drr(3) = Round(drr(3) / drr(2) / UBound(bt, 2), 2)
  136.         drr(4) = Round(drr(4) / drr(2), 4)
  137.         drr(5) = Round(drr(5) / drr(2), 4)
  138.         drr(6) = Round(drr(6) / drr(2), 4)
  139.         drr(7) = Round(drr(3) * 0.3 + drr(4) * 0.3 * 100 + drr(5) * 0.2 * 100 + drr(6) * 0.2 * 100, 2)
  140.         d2(drr(7)) = d2(drr(7)) + 1
  141.       End If
  142.       .Cells(4, n).Resize(1, UBound(drr)) = drr
  143.       .Cells(5, n).Resize(UBound(crr), UBound(crr, 2)) = crr
  144.       With .Cells(2, n).Resize(2 + 1 + UBound(crr), UBound(crr, 2))
  145.         .Borders.LineStyle = xlContinuous
  146.         .BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
  147.         With .Font
  148.           .Name = "微软雅黑"
  149.           .Size = 11
  150.         End With
  151.       End With
  152.       n = n + 8
  153.     Next
  154.     c = .UsedRange.Find(what:="*", LookIn:=xlValues, lookat:=xlWhole, searchorder:=xlByColumns, searchdirection:=xlPrevious).Column
  155.     For j = 1 To c Step 8
  156.       .Columns(j + 3).Resize(, 3).NumberFormatLocal = "0.00%"
  157.     Next
  158.     With .UsedRange
  159.       .HorizontalAlignment = xlCenter
  160.       .VerticalAlignment = xlCenter
  161.     End With
  162.     .UsedRange.EntireColumn.AutoFit
  163.   End With
  164.   Application.ScreenUpdating = True
  165.   MsgBox "学校排名计算完毕!"
  166. End Sub


复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-7-20 20:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
增加了学校排名代码。现在就剩教师排名了。

成绩分析.rar

353.79 KB, 下载次数: 13

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-7-20 20:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
用函数写比vba好多了。

TA的精华主题

TA的得分主题

发表于 2020-7-20 21:05 | 显示全部楼层
chxw68 发表于 2020-7-20 20:53
增加了学校排名代码。现在就剩教师排名了。

不错,还有教师考核排名,就完美了。

TA的精华主题

TA的得分主题

发表于 2020-7-20 21:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cqcbc 发表于 2020-7-20 21:05
不错,还有教师考核排名,就完美了。

教师排名没样表没说明,不知道要求是什么。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-20 21:10 | 显示全部楼层
本帖最后由 辛玛 于 2020-7-20 21:14 编辑
chxw68 发表于 2020-7-20 20:47
增加了班级排名代码。其他的楼主也没样表,不知道怎么写了。
老师排名
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-20 21:16 | 显示全部楼层
chxw68 发表于 2020-7-20 21:05
教师排名没样表没说明,不知道要求是什么。

辛苦老师了,今天我已无法上传更多附件了,被系统限制了,还有一个学校排名的没传成功。

TA的精华主题

TA的得分主题

发表于 2020-7-20 21:24 | 显示全部楼层
辛玛 发表于 2020-7-20 21:16
辛苦老师了,今天我已无法上传更多附件了,被系统限制了,还有一个学校排名的没传成功。

我们这里考核的是五项:参考率、平均分、及格率、优生率、低分率。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-20 21:42 | 显示全部楼层
cqcbc 发表于 2020-7-20 21:24
我们这里考核的是五项:参考率、平均分、及格率、优生率、低分率。

老师,你是哪个地区的?

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-20 21:46 | 显示全部楼层
chxw68 发表于 2020-7-20 21:05
教师排名没样表没说明,不知道要求是什么。

chxw68老师,教师排名主要计算下面几项。
科目        教师姓名        任教班级        总人数        平均分        及格率        关爱率        三率评估分        排名

因为有的老师是任教同年级同科目几个班的,所以这里是求这个老师同年级同科目的几个班的平均值。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-12-8 10:38 , Processed in 0.025685 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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