ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求VBA,关于成绩统计的简单问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-12-21 15:47 | 显示全部楼层 |阅读模式
本帖最后由 qcdf 于 2024-12-21 15:48 编辑

本来这个统计表,用函数和公式来实现比较简单,但现在年级上需要这个统计表,他们单独组织考试的时候自己弄一下,容易把一些数据搞得乱七八糟,就想着论坛里求大佬用VBA给弄一下,也学习一下。方便年级老师一键统计。

VBA达到的目的和要求:
在【成绩统计】表里,按表头信息所标示的区域,拉取或统计以下数据信息:

1、按照班级顺序从【学生原始成绩】表里拉取考生信息和原始成绩。
2、然后按照【成绩设置】表里的折算规则,统计出折算成绩。
3、根据折算成绩,进行单科成绩的年级排名。
4、在最后的总分及排名区域,计算原始总分和折算总分,并根据原始总分和折算总分进行年级排名和本班班级排名。
     (排名规则与rank函数规则一样,即分数相同,排名相同,不接续)

详见附件:
成绩统计表.zip (199.57 KB, 下载次数: 15)



TA的精华主题

TA的得分主题

发表于 2024-12-21 18:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
要求还挺多。

TA的精华主题

TA的得分主题

发表于 2024-12-21 18:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-12-21 19:15 | 显示全部楼层
本帖最后由 shiruiqiang 于 2024-12-21 19:18 编辑

新手比较粗浅的写法,后面自己照着写一下
只写一半
image.jpg

成绩统计表.rar

339.93 KB, 下载次数: 5

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-12-21 20:46 | 显示全部楼层
Sub chengjitj()
Dim i, j, k, irow, irow1, kk, m, n, p, q, s, ss, t
Dim ar, br, tepar
irow = Sheets("学生原始成绩").[a10000].End(xlUp).Row
ar = Sheets("学生原始成绩").Range("a1:n" & irow)
Dim d1, d2 As Object
Set d1 = CreateObject("scripting.dictionary")
Set d2 = CreateObject("scripting.dictionary")
br = Sheets("成绩设置").[a1].Resize(11, 6)
For j = 3 To UBound(br)
  d1(br(j, 1)) = br(j, 3)
Next
For i = 3 To irow
    d2(ar(i, 1)) = ""
Next
Sheets("成绩统计").[a4].Resize(1000, 38).ClearContents
ReDim tepar(1 To irow - 2, 1 To 38)
For Each kk In d2.keys
   For k = 3 To irow
   If kk = ar(k, 1) Then
      n = n + 1
     For m = 1 To 14
      tepar(n, m) = ar(k, m)
       Next
      For p = 15 To 23
      tepar(n, p) = tepar(n, p - 9) * d1(ar(2, p - 9))
      Next
    End If
  Next
  
  With Sheets("成绩统计")
  irow1 = .[a10000].End(xlUp).Row
  .Cells(irow1 + 1, 1).Resize(n, 38) = tepar
  For s = irow1 + 1 To irow1 + n
        .Cells(s, 33) = WorksheetFunction.Sum(.Cells(s, 7).Resize(1, 8))
        .Cells(s, 36) = WorksheetFunction.Sum(.Cells(s, 15).Resize(1, 8))
   Next
   For ss = irow1 + 1 To irow1 + n
      .Cells(ss, 34) = WorksheetFunction.Rank(.Cells(ss, 33), .Cells(irow1 + 1, 33).Resize(n, 1))
      .Cells(ss, 37) = WorksheetFunction.Rank(.Cells(ss, 36), .Cells(irow1 + 1, 36).Resize(n, 1))
    Next
    End With
    n = 0
Next
With Sheets("成绩统计")
irow1 = .[a10000].End(xlUp).Row
For q = 4 To irow1
   .Cells(q, 35) = WorksheetFunction.Rank(.Cells(q, 33), .Cells(4, 33).Resize(irow1 - 3, 1))
   .Cells(q, 38) = WorksheetFunction.Rank(.Cells(q, 36), .Cells(4, 36).Resize(irow1 - 3, 1))
   For t = 24 To 32
        .Cells(q, t) = WorksheetFunction.Rank(.Cells(q, t - 9), .Cells(4, t - 9).Resize(irow1 - 3, 1))
     Next
Next
End With
MsgBox "ok"
End Sub

TA的精华主题

TA的得分主题

发表于 2024-12-21 20:47 | 显示全部楼层
供参考,欢迎批评指正

副本成绩统计表.rar

305.96 KB, 下载次数: 6

样稿

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-21 21:27 来自手机 | 显示全部楼层
翁知江安 发表于 2024-12-21 20:47
供参考,欢迎批评指正

非常感谢,学习了。我在认真看。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-21 21:28 来自手机 | 显示全部楼层
shiruiqiang 发表于 2024-12-21 19:15
新手比较粗浅的写法,后面自己照着写一下
只写一半

非常感谢老师,我也在学习。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-21 21:29 来自手机 | 显示全部楼层
chxw68 发表于 2024-12-21 18:59
简单问题就留给初学者吧。

VBA还是复杂,特别是我这种小白。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-21 21:30 来自手机 | 显示全部楼层
ykcbf1100 发表于 2024-12-21 18:30
要求还挺多。

我写的有点啰嗦了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 16:13 , Processed in 0.036477 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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