ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: gtbb2002

[求助] 初一年成绩分析

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-30 22:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub kfx()
  2.     Dim r%, i%
  3.     Dim arr, brr
  4.     Dim d As Object
  5.     Set d = CreateObject("scripting.dictionary")
  6.     Set d1 = CreateObject("scripting.dictionary")
  7.     Application.ScreenUpdating = False
  8.     Application.DisplayAlerts = False
  9.     Call pub
  10.     ls = 26
  11.     With Worksheets("录入成绩")
  12.         r = .Cells(.Rows.Count, 4).End(xlUp).Row
  13.         arr = .Range("a2:q" & r)
  14.     End With
  15.     For j = 5 To UBound(arr, 2) - 1
  16.         If Application.Count(Application.Index(arr, 0, j)) > 0 Then
  17.             Set d(arr(1, j)) = CreateObject("scripting.dictionary")
  18.             jq30 = Application.Large(Application.Index(arr, 0, j), 30)
  19.             jq60 = Application.Large(Application.Index(arr, 0, j), 60)
  20.             jh50 = Application.Small(Application.Index(arr, 0, j), 50)

  21.             For i = 2 To UBound(arr)
  22.                 If Not d(arr(1, j)).exists(arr(i, 2)) Then
  23.                     ReDim brr(1 To ls)
  24.                     brr(1) = arr(i, 2)
  25.                     brr(2) = arr(1, j)
  26.                 Else
  27.                     brr = d(arr(1, j))(arr(i, 2))
  28.                 End If
  29.                 brr(3) = brr(3) + 1
  30.                 If Len(arr(i, j)) <> 0 Then
  31.                     brr(4) = brr(4) + 1
  32.                     brr(5) = brr(5) + arr(i, j)
  33.                     Select Case arr(i, j)
  34.                         Case Is >= d_cs(arr(1, j))("A")
  35.                             brr(8) = brr(8) + 1
  36.                         Case Is >= d_cs(arr(1, j))("B")
  37.                             brr(9) = brr(9) + 1
  38.                         Case Is >= d_cs(arr(1, j))("C")
  39.                             brr(10) = brr(10) + 1
  40.                         Case Is >= d_cs(arr(1, j))("D")
  41.                             brr(11) = brr(11) + 1
  42.                         Case Else
  43.                             brr(12) = brr(12) + 1
  44.                     End Select
  45.                     If arr(i, j) >= d_cs(arr(1, j))("C") Then
  46.                         brr(13) = brr(13) + 1
  47.                     End If
  48.                     If arr(i, j) >= d_cs(arr(1, j))("B") Then
  49.                         brr(16) = brr(16) + 1
  50.                     End If
  51.                     If IsEmpty(brr(21)) Then
  52.                         brr(21) = arr(i, j)
  53.                     Else
  54.                         If brr(21) < arr(i, j) Then
  55.                             brr(21) = arr(i, j)
  56.                         End If
  57.                     End If
  58.                     If IsEmpty(brr(22)) Then
  59.                         brr(22) = arr(i, j)
  60.                     Else
  61.                         If brr(22) > arr(i, j) Then
  62.                             brr(22) = arr(i, j)
  63.                         End If
  64.                     End If
  65.                     If arr(i, j) >= jq30 Then
  66.                         brr(24) = brr(24) + 1
  67.                     End If
  68.                     If arr(i, j) >= jq60 Then
  69.                         brr(25) = brr(25) + 1
  70.                     End If
  71.                     If arr(i, j) <= jh50 Then
  72.                         brr(26) = brr(26) + 1
  73.                     End If
  74.                         
  75.                 End If
  76.                 d(arr(1, j))(arr(i, 2)) = brr
  77.             Next
  78.         End If
  79.     Next
  80.     With Worksheets("科分析")
  81.         .Cells.Clear
  82.         x = 1
  83.         For Each aa In d.keys
  84.             ReDim crr(1 To d(aa).Count, 1 To UBound(brr))
  85.             ReDim drr(1 To UBound(crr, 2))
  86.             drr(1) = "合计"
  87.             drr(2) = aa
  88.             m = 0
  89.             For Each bb In d(aa).keys
  90.                 m = m + 1
  91.                 brr = d(aa)(bb)
  92.                 For j = 1 To UBound(brr)
  93.                     crr(m, j) = brr(j)
  94.                 Next
  95.                 For Each y In Array(3, 4, 5, 8, 9, 10, 11, 12, 13, 16, 19, 24, 25, 26)
  96.                     drr(y) = drr(y) + brr(y)
  97.                 Next
  98.             Next
  99.             For i = 1 To UBound(crr)
  100.                 If Len(crr(i, 4)) <> 0 And crr(i, 4) <> 0 Then
  101.                     crr(i, 5) = Round(crr(i, 5) / crr(i, 4), 2)
  102.                     crr(i, 14) = Round(crr(i, 13) / crr(i, 4), 4)
  103.                     crr(i, 17) = Round(crr(i, 16) / crr(i, 4), 4)
  104.                     crr(i, 19) = Round(crr(i, 8) / crr(i, 4), 4)
  105.                     crr(i, 23) = Round(crr(i, 12) / crr(i, 4), 4)
  106.                 End If
  107.             Next
  108.             If Len(drr(4)) <> 0 And drr(4) <> 0 Then
  109.                 drr(5) = Round(drr(5) / drr(4), 2)
  110.                 drr(14) = Round(drr(13) / drr(4), 4)
  111.                 drr(17) = Round(drr(16) / drr(4), 4)
  112.                 drr(19) = Round(drr(8) / drr(4), 4)
  113.                 drr(23) = Round(drr(12) / drr(4), 4)
  114.                 drr(21) = Application.Max(Application.Index(crr, 0, 21))
  115.                 drr(22) = Application.Min(Application.Index(crr, 0, 22))
  116.                
  117.             End If
  118.             
  119.             For i = 1 To UBound(crr)
  120.                 crr(i, 7) = crr(i, 5) - drr(5)
  121.             Next
  122.             For Each y In Array(5, 14, 17, 19)
  123.                 d1.RemoveAll
  124.                 For i = 1 To UBound(crr)
  125.                     If Len(crr(i, y)) <> 0 And crr(i, y) <> 0 Then
  126.                         d1(crr(i, y)) = d1(crr(i, y)) + 1
  127.                     End If
  128.                 Next
  129.                 nn = 1
  130.                 kk = d1.keys
  131.                 For k = 0 To UBound(kk)
  132.                     mm = Application.Large(kk, k + 1)
  133.                     ss = d1(mm)
  134.                     d1(mm) = nn
  135.                     nn = nn + ss
  136.                 Next
  137.                 For i = 1 To UBound(crr)
  138.                     If Len(crr(i, y)) <> 0 And crr(i, y) <> 0 Then
  139.                         crr(i, y + 1) = d1(crr(i, y))
  140.                     End If
  141.                 Next
  142.             Next


  143.             With .Cells(x, 1)
  144.                 .Value = jbcs(1, 2) & jbcs(2, 2) & jbcs(3, 2) & jbcs(4, 2) & aa & "科质量分析"
  145.                 .Resize(1, ls).Merge
  146.                 With .Font
  147.                     .Size = 18
  148.                     .Bold = True
  149.                 End With
  150.             End With

  151.             .Cells(x + 1, 1).Resize(1, ls) = Array("班级", "科目", "应考" & vbLf & "人数", "实考" & vbLf & "人数", "平均" & vbLf & "分", "名" & vbLf & "次", "平均" & vbLf & "相对" & vbLf & "分", "A" & vbLf & "(人)", "B" & vbLf & "(人)", "C" & vbLf & "(人)", "D" & vbLf & "(人)", "E" & vbLf & "(人)", "及格人数" & vbLf & "(C以上)", "及格" & vbLf & "率", "名次", "良好人数" & vbLf & "(A/B)", "良好" & vbLf & "率", "名次", "A率", "名次", "最高" & vbLf & "分", "最低" & vbLf & "分", "低分率" & vbLf & "(E)", "级前" & vbLf & "30名" & vbLf & "(人)", "级前" & vbLf & "60名" & vbLf & "(人)", "级后" & vbLf & "50名" & vbLf & "(人)", "A" & vbLf & "(人)", "B" & vbLf & "(人)", "C" & vbLf & "(人)", "D" & vbLf & "(人)")
  152.             .Cells(x + 2, 1).Resize(1, UBound(drr)) = drr
  153.             .Cells(x + 3, 1).Resize(UBound(crr), UBound(crr, 2)) = crr
  154.             With .Cells(x + 1, 1).Resize(UBound(crr) + 2, ls)
  155.                 .Borders.LineStyle = xlContinuous
  156.                 With .Font
  157.                     .Size = 10
  158.                 End With
  159.             End With
  160.             .Rows(x).RowHeight = 22.5
  161.             .Rows(x + 1).RowHeight = 36
  162.             .Rows(x + 2).Resize(UBound(brr) + 2).RowHeight = 15
  163.             x = x + UBound(crr) + 4
  164.         Next
  165.         .Range("n:n,q:q,s:s,w:w").NumberFormatLocal = "0.00%"
  166.         .Columns("a:z").AutoFit
  167.         With .UsedRange
  168.             .HorizontalAlignment = xlCenter
  169.             .VerticalAlignment = xlCenter
  170.         End With
  171.     End With
  172. End Sub

复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-3-30 22:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
科分析的代码写好了。其他的代码抽时间再改写吧。

高一年期中考成绩分析(新).rar

138.63 KB, 下载次数: 15

TA的精华主题

TA的得分主题

发表于 2023-3-31 09:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
全部写完了,没有时间认真校对,肯定还有不少问题,尽量抽空修改吧。

高一年期中考成绩分析(新).rar

185.24 KB, 下载次数: 22

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-3-31 10:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chxw68 发表于 2023-3-31 09:45
全部写完了,没有时间认真校对,肯定还有不少问题,尽量抽空修改吧。

感谢老师在百忙之中,抽出时间,感恩。

TA的精华主题

TA的得分主题

发表于 2023-3-31 12:15 | 显示全部楼层
chxw68 发表于 2023-3-30 22:08
科分析的代码写好了。其他的代码抽时间再改写吧。

优秀作品,无私奉献,值得尊敬!

TA的精华主题

TA的得分主题

发表于 2023-3-31 18:03 | 显示全部楼层
chxw68 发表于 2023-3-31 09:45
全部写完了,没有时间认真校对,肯定还有不少问题,尽量抽空修改吧。

老师您好,测试如下,分科统计显示下标越界,及格差显示类型不匹配,全科及格率没有统计结果,还有总分这样也没有统计结果 ,科分析工作表没有生成总分项目的各项数据。其他数据均完成。谢谢!
及格差,运行不了.png
全科及格率没有数据.png

高一年期中考成绩分析(新).rar

162.92 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2023-3-31 21:47 | 显示全部楼层
NA2105 发表于 2023-3-31 18:03
老师您好,测试如下,分科统计显示下标越界,及格差显示类型不匹配,全科及格率没有统计结果,还有总分这 ...

VBA都是定制的,基本上一事一码,你把原始数据这么大幅度修改,代码运行出错是必然的!建议你最好一次性整理好自己的原始文件和需求,然后再来这里求助。

TA的精华主题

TA的得分主题

发表于 2023-3-31 21:55 | 显示全部楼层
NA2105 发表于 2023-3-31 18:03
老师您好,测试如下,分科统计显示下标越界,及格差显示类型不匹配,全科及格率没有统计结果,还有总分这 ...

最近特别忙,你等别人来帮助你吧,不要等我了。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-3-31 22:24 | 显示全部楼层
chxw68 发表于 2023-3-31 21:55
最近特别忙,你等别人来帮助你吧,不要等我了。

知道的,谢谢老师!

TA的精华主题

TA的得分主题

发表于 2023-4-1 19:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chxw68 发表于 2023-3-31 09:45
全部写完了,没有时间认真校对,肯定还有不少问题,尽量抽空修改吧。

老师在吗,那个全科及格率能帮我完善一下吗,其他暂时不用了,谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-10 21:13 , Processed in 0.048435 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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