Excel精英培训网

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

[已解决]按某列内的条件排名

[复制链接]
发表于 2015-11-19 17:23 | 显示全部楼层 |阅读模式
本帖最后由 安全网 于 2015-11-20 16:48 编辑

求助增加按照C内的条件排名,排名的数据写入汇总排名后面的VBA代码,具体见附件
最佳答案
2015-11-20 16:22
请看附件。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2015-11-19 17:23 | 显示全部楼层
附件已上传

条件排名.rar

38.03 KB, 下载次数: 8

回复

使用道具 举报

 楼主| 发表于 2015-11-20 08:49 | 显示全部楼层
就是区域内排名,全部排名,请问有高手知道怎么修改VBA代码吗
回复

使用道具 举报

发表于 2015-11-20 11:35 | 显示全部楼层
跟那个成绩排名不是一样的吗?不会改改?
回复

使用道具 举报

发表于 2015-11-20 13:36 | 显示全部楼层
  1. Sub 排名()
  2.     Dim Bigrng As Range, MyCell As Range
  3.     Dim Flag As Boolean     '判断有否汇总列
  4.     If Not ActiveSheet.[b:b].Find("汇总") Is Nothing Then Flag = True    '有汇总,Flag为true
  5.     Set d = CreateObject("scripting.dictionary")
  6.     [p3:q65536].ClearContents
  7.     arr = [a1].CurrentRegion
  8.     rmax = IIf(Flag, UBound(arr) - 1, UBound(arr))     '最大行,根据有无汇总不同
  9.     Set MyCell = Application.InputBox(prompt:="请选择需要排名的列(点击标题栏)", Type:=8)
  10.     If MyCell.Columns.Count > 1 Then MsgBox "只能选择单列!": Exit Sub
  11.     c = MyCell.Column: bt = Cells(2, c) '标题
  12.     If InStr(bt, "月") = 0 And bt <> "汇总" Then MsgBox "请选择月份或汇总列!": Exit Sub
  13.    
  14.     Range("d3").Resize(rmax - 2, UBound(arr, 2) - 5).SpecialCells(xlCellTypeBlanks) = 0      '所有空格标上0,不然排名出错
  15.     Set Bigrng = Range(Cells(3, c), Cells(rmax, c))     '数据所在列的所有区域(全排名)
  16.     For i = 3 To rmax        '数据所在列的特定区域(区域排名)
  17.         qy = arr(i, 3)   '区域
  18.         If Not d.exists(qy) Then Set d(qy) = Cells(i, c) Else Set d(qy) = Union(d(qy), Cells(i, c))
  19.     Next
  20.    
  21.     ReDim brr(1 To rmax, 1 To 2)      '保存排名结果
  22.     For i = 3 To rmax
  23.         qy = arr(i, 3)
  24.         brr(i, 1) = Application.WorksheetFunction.Rank(Val(arr(i, c)), Bigrng)    '全排名
  25.         If d.exists(qy) Then brr(i, 2) = Application.WorksheetFunction.Rank(Val(arr(i, c)), d(qy))     '区域排名
  26.     Next
  27.    
  28.     [a1].CurrentRegion = arr
  29.     brr(2, 1) = bt & "总排名"
  30.     brr(2, 2) = bt & "区域排名"
  31.     [p1].Resize(rmax, 2) = brr
  32. End Sub
复制代码

条件排名.rar

49.06 KB, 下载次数: 4

回复

使用道具 举报

 楼主| 发表于 2015-11-20 13:55 | 显示全部楼层
grf1973 发表于 2015-11-20 13:36

排名的数据可否选择写入不同的列内
回复

使用道具 举报

发表于 2015-11-20 16:22 | 显示全部楼层    本楼为最佳答案   
请看附件。

条件排名.rar

21.75 KB, 下载次数: 4

回复

使用道具 举报

 楼主| 发表于 2015-11-21 16:48 | 显示全部楼层
grf1973 发表于 2015-11-20 16:22
请看附件。

如果不选择单元格标题栏,点击取消就会运行出错,这个怎么解决
回复

使用道具 举报

发表于 2015-11-23 10:50 | 显示全部楼层
貌似解决不了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 18:17 , Processed in 0.167117 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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