Excel精英培训网

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

[已解决]如何实现数字排序

[复制链接]
发表于 2016-5-13 13:45 | 显示全部楼层 |阅读模式
要求在附件中。如果不明白之处,请留言,谢谢!
最佳答案
2016-5-13 16:07
  1. Sub 排序()
  2.     Dim cel As Range
  3.     r = 23    '最大行,根据数据自定
  4.     crr = Array(1, 26, 27)        '要合并、撤销合并所在的列
  5.     For i = 6 To r
  6.         Cells(i, "AB") = i     '辅助列,用于合并单元格内的排序
  7.         For k = 0 To 2
  8.             j = crr(k)
  9.             Cells(i, j).UnMerge      '取消合并单元格
  10.             If Cells(i, j) = "" Then Cells(i, j) = Cells(i - 1, j)      '合并单元格取消后,给下面的空值赋值
  11.         Next
  12.     Next
  13.     Range("A6:AB" & r).Sort key1:=[aa6], key2:=[ab6]      '排序
  14.     Application.DisplayAlerts = False
  15.     For i = 6 To r         '合并单元格
  16.         For k = 0 To 2
  17.             j = crr(k)
  18.             Set cel = Cells(i, j)
  19.             If cel = cel.Offset(-1, 0) And Len(cel) > 0 Then cel.Offset(-1, 0).Resize(2, 1).Merge
  20.         Next
  21.     Next
  22.     [ab:ab] = ""     '清空辅助列
  23.     Application.DisplayAlerts = True
  24. End Sub
复制代码

0.zip

9.27 KB, 下载次数: 10

发表于 2016-5-13 14:00 | 显示全部楼层
取消合并单元格,上下行填充,排序,合并单元格
回复

使用道具 举报

 楼主| 发表于 2016-5-13 14:15 | 显示全部楼层
dsmch 发表于 2016-5-13 14:00
取消合并单元格,上下行填充,排序,合并单元格

这个主要是前面第一列有合并单元格,希望用VBA代码实现,谢谢!
回复

使用道具 举报

发表于 2016-5-13 14:54 | 显示全部楼层
痛苦的表格。
就按2楼的方法可以的。
排序后,把6-7行的合并格式恢复,
格式刷,刷其他人的数据。
回复

使用道具 举报

 楼主| 发表于 2016-5-13 15:54 | 显示全部楼层
dsmch 发表于 2016-5-13 14:00
取消合并单元格,上下行填充,排序,合并单元格

附件已上传啊。
回复

使用道具 举报

发表于 2016-5-13 16:07 | 显示全部楼层    本楼为最佳答案   
  1. Sub 排序()
  2.     Dim cel As Range
  3.     r = 23    '最大行,根据数据自定
  4.     crr = Array(1, 26, 27)        '要合并、撤销合并所在的列
  5.     For i = 6 To r
  6.         Cells(i, "AB") = i     '辅助列,用于合并单元格内的排序
  7.         For k = 0 To 2
  8.             j = crr(k)
  9.             Cells(i, j).UnMerge      '取消合并单元格
  10.             If Cells(i, j) = "" Then Cells(i, j) = Cells(i - 1, j)      '合并单元格取消后,给下面的空值赋值
  11.         Next
  12.     Next
  13.     Range("A6:AB" & r).Sort key1:=[aa6], key2:=[ab6]      '排序
  14.     Application.DisplayAlerts = False
  15.     For i = 6 To r         '合并单元格
  16.         For k = 0 To 2
  17.             j = crr(k)
  18.             Set cel = Cells(i, j)
  19.             If cel = cel.Offset(-1, 0) And Len(cel) > 0 Then cel.Offset(-1, 0).Resize(2, 1).Merge
  20.         Next
  21.     Next
  22.     [ab:ab] = ""     '清空辅助列
  23.     Application.DisplayAlerts = True
  24. End Sub
复制代码

0.rar

14.3 KB, 下载次数: 11

回复

使用道具 举报

 楼主| 发表于 2016-5-13 21:55 | 显示全部楼层
grf1973 发表于 2016-5-13 16:07

谢谢您,这个对现有数据非常好,能不能实现动态化排序,假如前五个是1-5名,后四个是1-4名,后边还有其他同样格式的数据排序,怎么实现在同一个表中排序?
回复

使用道具 举报

 楼主| 发表于 2016-5-13 22:13 | 显示全部楼层
grf1973 发表于 2016-5-13 16:07

设为最佳答案,但希望您能帮我实现7楼的效果,谢谢!
回复

使用道具 举报

发表于 2016-5-16 09:15 | 显示全部楼层
"前五个是1-5名,后四个是1-4名"   什么意思?
回复

使用道具 举报

 楼主| 发表于 2016-5-16 19:04 | 显示全部楼层
我的意思是,能不能实现相同格式情况下,不同级别的排序实现动态化排序,比如,6-23行是9个名次,24行至33行又有5个名次,即从1至5的顺序,但和前面的1-9名次不能混到一起排序,后边如果还有相类似的都可以实现动态化排序。我现有的思路是,在辅助列前一行的名次都排好了,自动识别,如1-9,就将这些排序,后边的1-5,就只排这5个的序号,后边的以此类推。

0.rar

16.13 KB, 下载次数: 10

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 16:34 , Processed in 0.427259 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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