ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助褚老师和其他大神 做VBA实现学生的成绩分析的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-1-18 21:04 | 显示全部楼层 |阅读模式
我下载了这个帖子中的分析表,发现把理综,文综修改成其他学科之后,对于班级总评中,优秀,优良,及格等数据的统计都是错误的,有没有大师帮帮忙修改一下,麻烦褚老师帮忙修改修改,谢谢
https://club.excelhome.net/threa ... tml?_dsign=9dafe8b1

成绩分析.rar

70.04 KB, 下载次数: 16

TA的精华主题

TA的得分主题

发表于 2024-1-18 21:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
改代码太累,劝退

TA的精华主题

TA的得分主题

发表于 2024-2-4 23:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
练写了一个功能,总感觉要用类比较合适
  1. function main(){
  2.         Application.ScreenUpdating = false
  3.         Application.DisplayAlerts = false
  4.         //数据入库
  5.         let arr = Sheets("原始成绩").Range("a1").CurrentRegion.Value2.slice(2)
  6.         let stu = {}
  7.         arr.forEach(v=>{
  8.                 stu[v[0]] ={
  9.                         "班级": v[1],"语文": v[2],"数学": v[3], "英语": v[4],        "物理": v[5],
  10.                         "生物": v[6],"历史": v[7], "地理": v[8],"道法": v[9],"体育": v[10]
  11.                 }
  12.                
  13.         })
  14.         sumKm(stu)
  15.         let kms = ["总分","语文","数学", "英语","物理","生物","历史", "地理","道法","体育"]
  16.         kms.forEach(km => {
  17.                 rankGrade(km,stu)
  18.                 rankCalss(km,stu)
  19.         })
  20.         //生成成绩汇总排名表
  21.         try{Sheets("成绩汇总排名表").Delete()}catch{}
  22.         let sh = Sheets.Add({After:Sheets("原始成绩")})
  23.             sh.Name = "成绩汇总排名表"
  24.             
  25.         let res = []
  26.         let bt =["姓名","班级","总分","总分年名","总分班名","语文","语文年名","语文班名","数学","数学年名","数学班名",
  27.                      "英语","英语年名","英语班名","物理","英语年名","英语班名","生物","生物年名","生物班名",
  28.                      "历史","历史年名","历史班名", "地理","地理年名","地理班名","道法","道法年名","道法班名","体育","体育年名","体育班名"]
  29.                      
  30.         res.push (bt)
  31.         for (let name in stu){
  32.                 let tmp = [name]
  33.                 let xm = ["班级","总分","总分年名","总分班名","语文","语文年名","语文班名","数学","数学年名","数学班名",
  34.                      "英语","英语年名","英语班名","物理","英语年名","英语班名","生物","生物年名","生物班名",
  35.                      "历史","历史年名","历史班名", "地理","地理年名","地理班名","道法","道法年名","道法班名","体育","体育年名","体育班名"]
  36.                 xm.forEach(m => tmp.push(stu[name][m]))
  37.                 res.push(tmp)
  38.         }
  39.        
  40.                 sh.Range("a1").CurrentRegion.ClearContents()
  41.                 sh.Range("a1").Resize(res.length,res[0].length).Value2 = res
  42.                 sh.Columns("a:ba").AutoFit()
  43.                 sh.ListObjects.Add(xlSrcRange,sh.UsedRange,undefined,xlYes);
  44.         Application.ScreenUpdating = true
  45.         Application.DisplayAlerts = true
  46. }
  47. function rankGrade (km,stu){
  48.         let tmp =[]
  49.         for ( let name in stu){
  50.                 tmp.push([name,stu[name]["班级"],stu[name][km]])
  51.         }
  52.         tmp = tmp.sort((a,b) =>b[2] - a[2] )
  53.         for(let i = 0 ;i< tmp.length ; i++){
  54.                 if (i ==0) {
  55.                         stu[tmp[i][0]][km+"年名"] = 1
  56.                 }else {
  57.                         stu[tmp[i][0]][km+"年名"] = tmp[i][2] == tmp[i-1][2]? stu[tmp[i-1][0]][km+"年名"] : stu[tmp[i-1][0]][km+"年名"]+1
  58.                 }
  59.         }       
  60. }
  61. function rankCalss (km,stu){
  62.         let  clss ={}
  63.         for ( let name  in stu){
  64.                 if(!clss[stu[name]["班级"]]) {
  65.                         clss[stu[name]["班级"]]=[ [name,stu[name]["班级"],stu[name][km]] ]
  66.                 }else{
  67.                         clss[stu[name]["班级"]].push([name,stu[name]["班级"],stu[name][km]])
  68.                 }
  69.         }
  70.    for(let k in clss){
  71.              let tmp = clss[k].sort((a,b) =>b[2] - a[2] )
  72.              for(let i = 0 ;i< tmp.length ; i++){
  73.                 if (i ==0) {
  74.                         stu[tmp[i][0]][km+"班名"] = 1
  75.                 }else {
  76.                         stu[tmp[i][0]][km+"班名"] = tmp[i][2] == tmp[i-1][2]? stu[tmp[i-1][0]][km+"班名"] : stu[tmp[i-1][0]][km+"班名"]+1
  77.                 }
  78.          }       
  79.    }
  80. }

  81. function sumKm(stu){
  82.         let kms = ["语文","数学", "英语","物理","生物","历史", "地理","道法","体育"]
  83.         for ( let name in stu){
  84.                 stu[name]["总分"] = 0
  85.                 kms.forEach(km => stu[name]["总分"] += stu[name][km] )
  86.         }
  87. }
复制代码


评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-21 20:24 , Processed in 0.029804 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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