ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 学生排名问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-2-28 17:19 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
大神们,我遇到这样一个问题:高三年级成绩排名,其中复读生不参与应届生的排名,但是要对应到应届生的名次。比如应届生600分100名,往届生600分就为100名,如果应届生600分100名,595分101名,往届生599分则为101名,求助!

TA的精华主题

TA的得分主题

发表于 2017-2-28 17:52 | 显示全部楼层
上个附件,模拟一些数据,这样别人才能帮到你。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-1 09:15 | 显示全部楼层
excel我最爱 发表于 2017-2-28 17:52
上个附件,模拟一些数据,这样别人才能帮到你。

麻烦帮我看看,谢谢

复读生排名.zip

2.85 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2017-3-2 09:00 | 显示全部楼层
本帖最后由 zy596561385 于 2017-3-2 10:14 编辑

因为我是初学者,不要笑话我。代码有点长

  1. Sub 排名()
  2. Dim a%, b%
  3. Dim yjs1 As Range
  4. Dim fds1 As Range
  5. Dim yjs2 As Range
  6. Dim fds2 As Range
  7. Dim yjshR1 As Range
  8. Dim yjshR2 As Range
  9. Dim fdshR1 As Range
  10. Dim fdshR11 As Range
  11. Dim rng As Range
  12. Set yjs1 = [b1]
  13. Set fds1 = [b1]
  14. Set yjs2 = [b1]
  15. Set fds2 = [b1]
  16. zsyhs = Columns(1).Find("*", , , , , xlPrevious).Row
  17. For Each rng In Range("b2:b" & zsyhs)
  18.     abc = rng.Address
  19.     If rng = "应届生" Then
  20.     Set yjs1 = Union(yjs1, rng)
  21.     Set yjs2 = Union(yjs2, rng)
  22.     Else
  23.     Set fds1 = Union(fds1, rng)
  24.     Set fds2 = Union(fds2, rng)
  25.     End If
  26. Next
  27. mc = 1
  28. For Each yjshR1 In yjs1
  29. yjshR11 = yjshR1.Address
  30. a = Range(yjshR11).Row
  31.     If a > 1 Then
  32.         cj1 = Cells(a, 3)
  33.         For Each yjshR2 In yjs2
  34.             yjshR22 = yjshR2.Address
  35.             b = Range(yjshR22).Row
  36.             If b > 1 Then
  37.                 cj2 = Cells(b, 3)
  38.                 If cj2 > cj1 Then mc = mc + 1
  39.             End If
  40.         Next
  41.         Cells(a, 4) = mc
  42.         mc = 1
  43.     End If
  44. Next

  45. Set fdshR11 = [b1]
  46. For Each fdshR1 In fds1
  47. fdshR11 = fdshR1.Address
  48. c = Range(fdshR11).Row
  49. mc = 1
  50. If c > 1 Then
  51. fdscj = Cells(c, 3)
  52.     For Each yjshR1 In yjs1
  53.     yjshR11 = yjshR1.Address
  54.     a = Range(yjshR11).Row
  55.         If a > 1 Then
  56.             cj1 = Cells(a, 3)
  57.             If fdscj = cj1 Then Cells(c, 4) = Cells(a, 4): GoTo 100
  58.         End If
  59.     Next
  60.     For Each yjshR1 In yjs1
  61.     yjshR11 = yjshR1.Address
  62.     a = Range(yjshR11).Row
  63.         If a > 1 Then
  64.             cj1 = Cells(a, 3)
  65.             If fdscj < cj1 Then
  66.             mc = mc + 1
  67.             End If
  68.         End If
  69.     Next
  70.     Cells(c, 4) = mc
  71. End If
  72. 100:
  73. Next
  74. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2017-3-2 10:20 | 显示全部楼层
成品附件。

复读生排名.rar

19.33 KB, 下载次数: 11

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-3-6 10:46 | 显示全部楼层

谢谢你的帮忙,但是我几乎没怎么懂,能不能给我讲一下你的思路,谢谢

TA的精华主题

TA的得分主题

发表于 2017-3-9 12:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-3-9 13:05 | 显示全部楼层
悦姐姐123 发表于 2017-3-6 10:46
谢谢你的帮忙,但是我几乎没怎么懂,能不能给我讲一下你的思路,谢谢

由于我也才开始学,所以只能使用笨方法,
这个方法的主要思路就是将每一个符合条件的值跟所有的值进行比较,成立一个就累计+1
用函数的方法目前我想到的也是这个思路,但是感觉函数方法不太方便就没用
个人认为,肯定有更简短的代码涵盖了这个功能,只是目前还没学到/找到。所以只能用笨方法,多次循环判断。

TA的精华主题

TA的得分主题

发表于 2017-3-9 14:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
D22输入=SUMPRODUCT(IF($C$2:$C$21>C22,1,0))+1
同时按三键shift+ctrl+enter,往下填充

TA的精华主题

TA的得分主题

发表于 2017-3-10 08:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼上的公式也可以达到这个效果。函数简洁,方便,快捷;
但使用函数公式时要注意:1、应届生复读生要分开,混合在一起会失效。2、数据更多时$C$2:$C$21的范围要相应改写;使用VB缺点在于:找不到更简洁的方法时,写VB很耗时太过繁琐;好处在于:再多的数据,也不需要修改范围;混合在一起也有效;


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

本版积分规则

关闭

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

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

GMT+8, 2024-4-21 00:23 , Processed in 0.050146 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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