ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求计算各校各级各科平均分优秀率及格率的VBA代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-19 17:35 | 显示全部楼层 |阅读模式
求一篇VBA代码,要求如下:

1、根据16个学科的成绩,每科里面有10个学校的成绩,计算出各校各级各科的平均分、及格率、优秀率,及格指的是大于59.5的分数,优秀指的是大于79.5的分数。
2、在计算出的结果中,标出每列中的最大值和最小值,最大值用绿色字体表示,最小值用红色字体表示。
多谢论坛里的大神。


计算各校各级各科平均分优秀率及格率.rar

610.11 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2024-9-19 19:01 | 显示全部楼层
  1. Sub test()
  2.     Dim r%, i%
  3.     Dim arr, brr
  4.     Dim d As Object
  5.     Dim wb As Workbook
  6.     Dim ws As Worksheet
  7.     Dim mypath$, myname$
  8.     Set d = CreateObject("scripting.dictionary")
  9.     Set d1 = CreateObject("scripting.dictionary")
  10.     mypath = ThisWorkbook.Path & "\16科期考成绩"
  11.     myname = Dir(mypath & "*.xlsx")
  12.     n = 1
  13.     Do While myname <> ""
  14.         If myname <> ThisWorkbook.Name Then
  15.             bj = Split(myname, "-")(0)
  16.             n = n + 1
  17.             d1(bj) = n
  18.             Set wb = GetObject(mypath & myname)
  19.             With wb
  20.                 With .Worksheets(1)
  21.                     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  22.                     c = .Cells(1, .Columns.Count).End(xlToLeft).Column
  23.                     arr = .Range("a1").Resize(r, c)
  24.                     For i = 2 To UBound(arr)
  25.                         If Not d.exists(arr(i, 1)) Then
  26.                             Set d(arr(i, 1)) = CreateObject("scripting.dictionary")
  27.                         End If
  28.                         If Not d(arr(i, 1)).exists(bj) Then
  29.                             ReDim brr(1 To 4)
  30.                         Else
  31.                             brr = d(arr(i, 1))(bj)
  32.                         End If
  33.                         If Len(arr(i, c)) <> 0 Then
  34.                             brr(1) = brr(1) + 1
  35.                             brr(2) = brr(2) + arr(i, c)
  36.                             If arr(i, c) >= 80 Then
  37.                                 brr(3) = brr(3) + 1
  38.                             End If
  39.                             If arr(i, c) >= 60 Then
  40.                                 brr(4) = brr(4) + 1
  41.                             End If
  42.                         End If
  43.                         d(arr(i, 1))(bj) = brr
  44.                     Next
  45.                 End With
  46.                 .Close False
  47.             End With
  48.         End If
  49.         myname = Dir
  50.     Loop
  51.     ls = 1 + d1.Count
  52.     ReDim crr(1 To d.Count, 1 To ls)
  53.     ReDim drr(1 To d.Count, 1 To ls)
  54.     ReDim frr(1 To d.Count, 1 To ls)
  55.     m = 0
  56.     For Each aa In d.keys
  57.         m = m + 1
  58.         crr(m, 1) = aa
  59.         drr(m, 1) = aa
  60.         frr(m, 1) = aa
  61.         For Each bb In d(aa).keys
  62.             brr = d(aa)(bb)
  63.             n = d1(bb)
  64.             If Len(brr(1)) <> 0 And brr(1) <> 0 Then
  65.                 crr(m, n) = Application.Round(brr(2) / brr(1), 2)
  66.                 drr(m, n) = Application.Round(brr(3) / brr(1), 4)
  67.                 frr(m, n) = Application.Round(brr(4) / brr(1), 4)
  68.             End If
  69.         Next
  70.     Next
  71.     With Worksheets("各校各级各科平均分")
  72.         .UsedRange.Offset(1, 0).Clear
  73.         With .Range("a1")
  74.             .UnMerge
  75.             .Resize(1, ls).Merge
  76.         End With
  77.         .Range("a2") = "学校"
  78.         .Range("b2").Resize(1, d1.Count) = d1.keys
  79.         .Range("a3").Resize(UBound(crr), UBound(crr, 2)) = crr
  80.         With .Range("a2").Resize(1 + UBound(crr), UBound(crr, 2))
  81.             .Borders.LineStyle = xlContinuous
  82.             With .Font
  83.                 .Name = "微软雅黑"
  84.                 .Size = 11
  85.             End With
  86.         End With
  87.         With .UsedRange
  88.             .HorizontalAlignment = xlCenter
  89.             .VerticalAlignment = xlCenter
  90.         End With
  91.     End With
  92.     With Worksheets("各校各级各科优秀率")
  93.         With .Range("a1")
  94.             .UnMerge
  95.             .Resize(1, ls).Merge
  96.         End With
  97.         .UsedRange.Offset(1, 0).Clear
  98.         .Range("a2") = "学校"
  99.         .Range("b2").Resize(1, d1.Count) = d1.keys
  100.         .Range("a3").Resize(UBound(drr), UBound(drr, 2)) = drr
  101.         .Range("b3").Resize(UBound(drr), UBound(drr, 2) - 1).NumberFormatLocal = "0.00%"
  102.         With .Range("a2").Resize(1 + UBound(drr), UBound(drr, 2))
  103.             .Borders.LineStyle = xlContinuous
  104.             With .Font
  105.                 .Name = "微软雅黑"
  106.                 .Size = 11
  107.             End With
  108.         End With
  109.         With .UsedRange
  110.             .HorizontalAlignment = xlCenter
  111.             .VerticalAlignment = xlCenter
  112.         End With
  113.     End With
  114.     With Worksheets("各校各级各科及格率")
  115.         With .Range("a1")
  116.             .UnMerge
  117.             .Resize(1, ls).Merge
  118.         End With
  119.         .UsedRange.Offset(1, 0).Clear
  120.         .Range("a2") = "学校"
  121.         .Range("b2").Resize(1, d1.Count) = d1.keys
  122.         .Range("a3").Resize(UBound(frr), UBound(frr, 2)) = frr
  123.         .Range("b3").Resize(UBound(frr), UBound(frr, 2) - 1).NumberFormatLocal = "0.00%"
  124.         With .Range("a2").Resize(1 + UBound(frr), UBound(frr, 2))
  125.             .Borders.LineStyle = xlContinuous
  126.             With .Font
  127.                 .Name = "微软雅黑"
  128.                 .Size = 11
  129.             End With
  130.         End With
  131.         With .UsedRange
  132.             .HorizontalAlignment = xlCenter
  133.             .VerticalAlignment = xlCenter
  134.         End With
  135.     End With


  136. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-19 19:03 | 显示全部楼层
详见附件。

计算各校各级各科平均分优秀率及格率.rar

625.06 KB, 下载次数: 18

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-19 19:38 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-20 11:08 | 显示全部楼层
本帖最后由 小草看日出 于 2024-9-20 11:14 编辑
limonet 发表于 2024-9-19 19:38
好的,上色是你们的强项。
谢谢关注。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-20 11:15 | 显示全部楼层


感谢褚老师在百忙之中出手相助。我看了,计算准确。但是有两点如果能完善一下就完美了,一是学校和科目的顺序能不能固定一下,A列的学校顺序依次为高新一小、高新二小、高新三小、皇台小学、实验小学、孙庄小学、溪庄小学、张楼小学、星海学校、世纪星小学;第二行的科目,依次为一语、一数、二语、二数、三语、三数、三英、四语、四数、四英、五语、五数、五英、六语、六数、六英,如附件EXCEL表格中的顺序;二是计算结果中每列是最大值用绿色字体表示,最小值用红色字体表示。再次感谢。

期考各校各级各科平均分优秀率及格率学校和科目顺序.rar

14.52 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2024-9-20 11:45 | 显示全部楼层
小草看日出 发表于 2024-9-20 11:15
感谢褚老师在百忙之中出手相助。我看了,计算准确。但是有两点如果能完善一下就完美了,一是学校和科目 ...

那就学校和科目顺序按照统计表中的[各校各级各科平均分]顺序排列,这样存在的问题就是事先要把该加的学校和科目加上,否则统计不上。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-9-20 12:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
修改好了。

计算各校各级各科平均分优秀率及格率.rar

626.79 KB, 下载次数: 9

评分

1

查看全部评分

TA的精华主题

TA的得分主题

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

修改后达到我想要的结果了,现在已经完美了。帮我解决了大问题,提高了工作效率,省了很多时间。非常感谢。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-21 11:27 , Processed in 0.043879 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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