ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 恳请完成学生成绩分析表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-11 11:04 | 显示全部楼层 |阅读模式
请根据“成绩”表和“参数”表,用VBA把相对应的数据生成到“分析表”中,谢谢。见附件

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-11 11:16 | 显示全部楼层
上传附件。。。。。。

学生成绩分析.rar

34.15 KB, 下载次数: 56

TA的精华主题

TA的得分主题

发表于 2018-7-11 15:26 | 显示全部楼层
  1. Sub test()
  2.   Dim r%, i%
  3.   Dim arr, brr
  4.   Dim d As Object
  5.   Set d = CreateObject("scripting.dictionary")
  6.   Set dcs = CreateObject("scripting.dictionary")
  7.   With Worksheets("参数")
  8.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  9.     c = .Cells(2, .Columns.Count).End(xlToLeft).Column
  10.     arr = .Range("a2").Resize(r - 1, c)
  11.   End With
  12.   For j = 2 To UBound(arr, 2)
  13.     Set dcs(arr(1, j)) = CreateObject("scripting.dictionary")
  14.     For i = 2 To UBound(arr)
  15.       dcs(arr(1, j))(arr(i, 1)) = arr(i, j)
  16.     Next
  17.   Next
  18.   With Worksheets("成绩")
  19.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  20.     c = .Cells(2, .Columns.Count).End(xlToLeft).Column
  21.     arr = .Range("a2").Resize(r, c)
  22.     For i = 2 To UBound(arr)
  23.       bj = Val(arr(i, 2))
  24.       If Not d.exists(bj) Then
  25.         Set d(bj) = CreateObject("scripting.dictionary")
  26.       End If
  27.       For j = 5 To UBound(arr, 2)
  28.         If dcs.exists(arr(1, j)) Then
  29.           If Len(arr(i, j)) <> 0 Then
  30.             If Not d(bj).exists(arr(1, j)) Then
  31.               ReDim brr(1 To 9)
  32.             Else
  33.               brr = d(bj)(arr(1, j))
  34.             End If
  35.             brr(1) = brr(1) + 1
  36.             brr(2) = brr(2) + arr(i, j)
  37.             If IsEmpty(brr(3)) Then
  38.               brr(3) = arr(i, j)
  39.             Else
  40.               If brr(3) < arr(i, j) Then
  41.                 brr(3) = arr(i, j)
  42.               End If
  43.             End If
  44.             If IsEmpty(brr(4)) Then
  45.               brr(4) = arr(i, j)
  46.             Else
  47.               If brr(4) > arr(i, j) Then
  48.                 brr(4) = arr(i, j)
  49.               End If
  50.             End If
  51.             If arr(i, j) >= dcs(arr(1, j))("及格") Then
  52.               brr(5) = brr(5) + 1
  53.             End If
  54.             If arr(i, j) >= dcs(arr(1, j))("优良") Then
  55.               brr(7) = brr(7) + 1
  56.             End If
  57.             d(bj)(arr(1, j)) = brr
  58.           End If
  59.         End If
  60.       Next
  61.     Next
  62.   End With
  63.   With Worksheets("分析表")
  64.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  65.     c = .Cells(4, .Columns.Count).End(xlToLeft).Column
  66.     arr = .Range("a1").Resize(r, c)
  67.     For i = 2 To 20 Step 18
  68.       For k = 1 To 15
  69.         bj = arr(i + k + 2, 1)
  70.         If d.exists(bj) Then
  71.           For j = 2 To 38 Step 9
  72.             km = Replace(arr(i, j), " ", "")
  73.             If d(bj).exists(km) Then
  74.               brr = d(bj)(km)
  75.               If brr(1) <> 0 Then
  76.                 brr(2) = Round(brr(2) / brr(1), 2)
  77.                 If Len(brr(5)) <> 0 Then
  78.                   brr(6) = Round(brr(5) / brr(1), 2)
  79.                 End If
  80.                 If Len(brr(7)) <> 0 Then
  81.                   brr(8) = Round(brr(7) / brr(1), 2)
  82.                 End If
  83.               End If
  84.               .Cells(i + k + 2, j).Resize(1, UBound(brr)) = brr
  85.             End If
  86.           Next
  87.         End If
  88.       Next
  89.     Next
  90.   End With
  91.             
  92.             
  93. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-7-11 15:30 | 显示全部楼层
楼主把分析表格式设计得太复杂了,代码没有写完,仅供参考吧。

学生成绩分析.rar

47.88 KB, 下载次数: 59

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-7-11 15:40 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-11 16:22 | 显示全部楼层
chxw68 发表于 2018-7-11 15:40
楼上代码有问题。

老师,又是您帮助我,太感谢您了。我下载下来。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-11 17:28 | 显示全部楼层
     褚老师,试了,非常好用,非常感谢您。     在紧靠各科目的下方有一要求:“年段平均分”能否再帮助一下写出代码

TA的精华主题

TA的得分主题

发表于 2018-7-11 18:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
详见附件。

学生成绩分析.rar

49.06 KB, 下载次数: 187

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-11 20:23 | 显示全部楼层

褚老师,新代码试了,非常非常完美。谢谢,谢谢,非常感谢

TA的精华主题

TA的得分主题

发表于 2018-7-11 20:35 | 显示全部楼层
lianjiexiang 发表于 2018-7-11 20:23
褚老师,新代码试了,非常非常完美。谢谢,谢谢,非常感谢

能用就好!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 09:59 , Processed in 0.029061 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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