ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 学校月考成绩登分后能一键自动生成各班级的分表,并且总动计算各班级科目的平均分等

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-24 22:20 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
求助:学校月考成绩登完后,年级总表能一键自动生成各班的成绩,并自动在成绩分析这个表中的自动生成各班科目的平均分 ,各班科目平均分与年级平均分的分差,计算出各班年级前10名,前20名,前30名,50名,100名,150名,200名人数

学校月考成绩统计分析.zip

39.28 KB, 下载次数: 72

TA的精华主题

TA的得分主题

发表于 2018-9-25 07:15 | 显示全部楼层
成绩登分总表没有班级,怎么生成各班成绩?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-25 08:02 | 显示全部楼层
719404338 发表于 2018-9-25 07:15
成绩登分总表没有班级,怎么生成各班成绩?

学号那一栏改成班级,不好意思

TA的精华主题

TA的得分主题

发表于 2018-9-25 08:32 | 显示全部楼层
  1. Sub test()
  2.   Dim r%, i%
  3.   Dim arr, brr
  4.   Dim d As Object
  5.   Set d = CreateObject("scripting.dictionary")
  6.   With Worksheets("成绩登分总表")
  7.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  8.     c = .Cells(1, .Columns.Count).End(xlToLeft).Column
  9.     arr = .Range("b1:b" & r)
  10.     For i = 2 To UBound(arr)
  11.       bj = Left(arr(i, 1), 2)
  12.       If Not d.exists(bj) Then
  13.         Set d(bj) = .Range("a1").Resize(1, c)
  14.       End If
  15.       Set d(bj) = Union(d(bj), .Cells(i, 1).Resize(1, c))
  16.     Next
  17.   End With
  18.   For Each aa In d.keys
  19.     On Error Resume Next
  20.     Set ws = Worksheets(aa)
  21.     If Err Then
  22.       Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count))
  23.       ws.Name = aa
  24.     End If
  25.     On Error GoTo 0
  26.     With Worksheets(aa)
  27.       .Cells.Clear
  28.       d(aa).Copy .Range("a1")
  29.     End With
  30.   Next
  31. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-25 08:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
只写了拆分成绩的代码。

学校月考成绩统计分析.rar

53.45 KB, 下载次数: 50

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-25 09:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub test2()
  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.   Set djs = CreateObject("scripting.dictionary")
  8.   With Worksheets("班级和科任教师参数设置")
  9.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  10.     c = .Cells(1, .Columns.Count).End(xlToLeft).Column
  11.     arr = .Range("a1").Resize(r, c)
  12.     For i = 2 To UBound(arr)
  13.       Set djs(arr(i, 1)) = CreateObject("scripting.dictionary")
  14.       For j = 2 To UBound(arr, 2)
  15.         djs(arr(i, 1))(arr(1, j)) = arr(i, j)
  16.       Next
  17.     Next
  18.     For j = 2 To UBound(arr, 2)
  19.       d1(arr(1, j)) = j - 1
  20.     Next
  21.   End With
  22.   With Worksheets("成绩登分总表")
  23.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  24.     c = .Cells(1, .Columns.Count).End(xlToLeft).Column
  25.     arr = .Range("a1").Resize(r, c)
  26.   End With
  27.   For i = 2 To UBound(arr)
  28.     bj = Left(arr(i, 2), 2)
  29.     For j = 4 To UBound(arr, 2)
  30.       If d1.exists(arr(1, j)) Then
  31.         n = d1(arr(1, j)) * 3 - 1
  32.         If Not d.exists(bj) Then
  33.           ReDim brr(1 To 1 + d1.Count * 3)
  34.           brr(1) = Application.Text(Left(bj, 1), "[DBNum1]") & "(" & Mid(bj, 2, 1) & ")班"
  35.         Else
  36.           brr = d(bj)
  37.         End If
  38.         brr(n + 1) = brr(n + 1) + arr(i, j)
  39.         brr(n + 2) = brr(n + 2) + 1
  40.         d(bj) = brr
  41.       End If
  42.     Next
  43.   Next
  44.   brr = Application.Transpose(Application.Transpose(d.items))
  45.   ReDim crr(1 To UBound(brr, 2))
  46.   crr(1) = "年级平均"
  47.   For i = 1 To UBound(brr)
  48.     For j = 3 To UBound(brr, 2) Step 3
  49.       crr(j) = crr(j) + brr(i, j)
  50.       crr(j + 1) = crr(j + 1) + brr(i, j + 1)
  51.     Next
  52.     If djs.exists(brr(i, 1)) Then
  53.       For Each aa In d1.keys
  54.         n = d1(aa) * 3 - 1
  55.         If djs(brr(i, 1)).exists(aa) Then
  56.           brr(i, n) = djs(brr(i, 1))(aa)
  57.         End If
  58.       Next
  59.     End If
  60.   Next
  61.   For j = 3 To UBound(brr, 2) Step 3
  62.     If Len(crr(j + 1)) <> 0 And crr(j + 1) <> 0 Then
  63.       crr(j) = Round(crr(j) / crr(j + 1), 2)
  64.     End If
  65.     For i = 1 To UBound(brr)
  66.       If Len(brr(i, j + 1)) <> 0 And brr(i, j + 1) <> 0 Then
  67.         brr(i, j) = Round(brr(i, j) / brr(i, j + 1), 2)
  68.       End If
  69.       brr(i, j + 1) = brr(i, j) - crr(j)
  70.     Next
  71.   Next
  72.   For i = 1 To UBound(brr)
  73.     For j = 1 To UBound(brr, 2)
  74.       If brr(i, j) = 0 Then
  75.         brr(i, j) = ""
  76.       End If
  77.     Next
  78.   Next
  79.   For j = 1 To UBound(crr)
  80.     If crr(j) = 0 Then
  81.       crr(j) = ""
  82.     End If
  83.   Next
  84.   For j = 4 To UBound(crr) Step 3
  85.     crr(j) = ""
  86.   Next
  87.   With Worksheets("sheet1")
  88.     .Cells.Clear
  89.     .Range("a1") = "班级"
  90.     For Each aa In d1.keys
  91.       n = d1(aa) * 3 - 1
  92.       .Cells(1, n) = aa
  93.       .Cells(1, n + 1).Resize(1, 2) = Array("平均分", "分差")
  94.     Next
  95.     .Range("a2").Resize(UBound(brr), UBound(brr, 2)) = brr
  96.     .Cells(UBound(brr) + 2, 1).Resize(1, UBound(crr)) = crr
  97.     r = UBound(brr) + 2
  98.     c = .Cells(1, .Columns.Count).End(xlToLeft).Column
  99.     .Range("a1").Resize(r, c).Borders.LineStyle = xlContinuous
  100.     With .UsedRange
  101.       .HorizontalAlignment = xlCenter
  102.       .VerticalAlignment = xlCenter
  103.     End With
  104.   End With
  105. End Sub

复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-25 09:23 | 显示全部楼层
增加了计算平均分和分差的代码。

学校月考成绩统计分析.rar

59.39 KB, 下载次数: 42

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-25 09:32 | 显示全部楼层
  1. Sub test3()
  2.   Dim r%, i%
  3.   Dim arr, brr
  4.   Dim d As Object
  5.   Set d = CreateObject("scripting.dictionary")
  6.   fsd = [{10,30,50,100}]
  7.   With Worksheets("成绩登分总表")
  8.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  9.     c = .Cells(1, .Columns.Count).End(xlToLeft).Column
  10.     arr = .Range("a1").Resize(r, c)
  11.   End With
  12.   For i = 2 To UBound(arr)
  13.     bj = Left(arr(i, 2), 2)
  14.     bj = Application.Text(Left(bj, 1), "[DBNum1]") & "(" & Mid(bj, 2, 1) & ")班"
  15.     If Not d.exists(bj) Then
  16.       ReDim brr(1 To 5)
  17.       brr(1) = bj
  18.     Else
  19.       brr = d(bj)
  20.     End If
  21.     For j = 1 To UBound(fsd)
  22.       If arr(i, 16) <= fsd(j) Then
  23.         brr(j + 1) = brr(j + 1) + 1
  24.       End If
  25.     Next
  26.     d(bj) = brr
  27.   Next
  28.   With Worksheets("sheet2")
  29.     .Cells.Clear
  30.     .Range("a1") = "班级"
  31.     For j = 1 To UBound(fsd)
  32.       .Cells(1, j + 1) = "前" & fsd(j) & "名" & vbLf & "人数"
  33.     Next
  34.     .Range("a2").Resize(d.Count, 5) = Application.Transpose(Application.Transpose(d.items))
  35.     r = d.Count + 1
  36.     .Range("a1").Resize(r, 5).Borders.LineStyle = xlContinuous
  37.     With .UsedRange
  38.       .HorizontalAlignment = xlCenter
  39.       .VerticalAlignment = xlCenter
  40.     End With
  41.   End With
  42. End Sub


复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-25 09:33 | 显示全部楼层
详见附件。

学校月考成绩统计分析.rar

58.8 KB, 下载次数: 524

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-25 09:54 | 显示全部楼层
用函数处理的,EXCEL2013版,可参考一下。
学校月考成绩统计分析.rar (55.22 KB, 下载次数: 156)

评分

1

查看全部评分

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

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-24 07:50 , Processed in 0.045272 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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