Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3326|回复: 3

[已解决]成绩统计排名

[复制链接]
发表于 2016-7-1 09:43 | 显示全部楼层 |阅读模式
本帖最后由 dyzx 于 2016-7-3 09:25 编辑

请高手出马帮忙设计,能够自动统计总分、班排名和级排名,但在随意增减科目成绩后,又能自动统计出总分、班排名和级排名,又要同时写入表头(总分、班排名、级排名),多谢各位高手指教。
最佳答案
2016-7-1 21:55
  1. Sub tj()
  2.     arr = [a1].CurrentRegion
  3.     r = UBound(arr)
  4.     c = UBound(arr, 2)
  5.     ReDim brr(3 To UBound(arr), 1 To 3)
  6.     Set d = CreateObject("scripting.dictionary")
  7.     Dim NjRng As Range       '年级区域
  8.    
  9.     qs = 3           '起始
  10.     For i = 3 To r
  11.         For j = 4 To c
  12.             brr(i, 1) = brr(i, 1) + arr(i, j)
  13.         Next
  14.         If (i > 3 And arr(i, 1) <> arr(i - 1, 1)) Or i = r Then
  15.             js = IIf(i = r, r, i - 1)       '结束
  16.             d(arr(i - 1, 1)) = qs & "," & js
  17.             qs = i       '下一起始
  18.         End If
  19.     Next
  20.     Cells(2, c + 1) = "总分": Cells(2, c + 2) = "班排名": Cells(2, c + 3) = "级排名"
  21.     Cells(3, c + 1).Resize(i - 3) = brr
  22.     Set NjRng = Range(Cells(3, c + 1), Cells(r, c + 1))
  23.     For i = 3 To r
  24.         qs = Split(d(arr(i, 1)), ",")(0)
  25.         js = Split(d(arr(i, 1)), ",")(1)
  26.         brr(i, 2) = Application.WorksheetFunction.Rank(brr(i, 1), Range(Cells(qs, c + 1), Cells(js, c + 1)))
  27.         brr(i, 3) = Application.WorksheetFunction.Rank(brr(i, 1), NjRng)
  28.     Next
  29.     Cells(3, c + 1).Resize(i - 3, 3) = brr
  30. End Sub
复制代码

成绩统计.rar

25.08 KB, 下载次数: 16

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-7-1 18:18 | 显示全部楼层
回复

使用道具 举报

发表于 2016-7-1 21:55 | 显示全部楼层    本楼为最佳答案   
  1. Sub tj()
  2.     arr = [a1].CurrentRegion
  3.     r = UBound(arr)
  4.     c = UBound(arr, 2)
  5.     ReDim brr(3 To UBound(arr), 1 To 3)
  6.     Set d = CreateObject("scripting.dictionary")
  7.     Dim NjRng As Range       '年级区域
  8.    
  9.     qs = 3           '起始
  10.     For i = 3 To r
  11.         For j = 4 To c
  12.             brr(i, 1) = brr(i, 1) + arr(i, j)
  13.         Next
  14.         If (i > 3 And arr(i, 1) <> arr(i - 1, 1)) Or i = r Then
  15.             js = IIf(i = r, r, i - 1)       '结束
  16.             d(arr(i - 1, 1)) = qs & "," & js
  17.             qs = i       '下一起始
  18.         End If
  19.     Next
  20.     Cells(2, c + 1) = "总分": Cells(2, c + 2) = "班排名": Cells(2, c + 3) = "级排名"
  21.     Cells(3, c + 1).Resize(i - 3) = brr
  22.     Set NjRng = Range(Cells(3, c + 1), Cells(r, c + 1))
  23.     For i = 3 To r
  24.         qs = Split(d(arr(i, 1)), ",")(0)
  25.         js = Split(d(arr(i, 1)), ",")(1)
  26.         brr(i, 2) = Application.WorksheetFunction.Rank(brr(i, 1), Range(Cells(qs, c + 1), Cells(js, c + 1)))
  27.         brr(i, 3) = Application.WorksheetFunction.Rank(brr(i, 1), NjRng)
  28.     Next
  29.     Cells(3, c + 1).Resize(i - 3, 3) = brr
  30. End Sub
复制代码

成绩统计.rar

28.72 KB, 下载次数: 21

评分

参与人数 2 +9 收起 理由
today0427 + 6 大神,我主动来学习!
dyzx + 3 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-7-3 09:24 | 显示全部楼层
grf1973 发表于 2016-7-1 21:55

grf1973老师:就是这个效果,多谢。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-23 20:11 , Processed in 0.348069 second(s), 20 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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