Excel精英培训网

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

[已解决]用vba排序问题

[复制链接]
发表于 2016-7-12 17:20 | 显示全部楼层 |阅读模式
用vba排序问题,求帮忙!!!!
最佳答案
2016-7-12 22:05
1、分离成五列;2、按各列排序;3、恢复成一列。
  1. Sub tt()
  2.     arr = [a1].CurrentRegion
  3.     r = UBound(arr)
  4.     ReDim brr(1 To r, 10)
  5.     For i = 1 To r
  6.         xrr = Split(arr(i, 1), "/")
  7.         For j = 0 To UBound(xrr)
  8.             brr(i, j) = xrr(j)
  9.         Next
  10.     Next
  11.     [e1].Resize(r, 5) = brr    '辅助数组
  12.     cx = Array(3, 1, 2, 4, 5)    '排序各列的先后次序
  13.     With ActiveSheet.Sort        '对辅助数组排序
  14.         .SortFields.Clear
  15.         For x = 0 To UBound(cx)
  16.             c = cx(x)        '参与排序的列
  17.             .SortFields.Add Key:=Cells(1, c + 4), Order:=xlAscending
  18.         Next
  19.         .SetRange [e1].Resize(r, 5)
  20.         .Header = xlGuess
  21.         .MatchCase = False
  22.         .Orientation = xlTopToBottom
  23.         .SortMethod = xlPinYin
  24.         .Apply
  25.     End With
  26.     arr = [e1].Resize(r, 5)       '辅助数组恢复成原始格式
  27.     ReDim brr(1 To r, 1 To 1)
  28.     For i = 1 To r
  29.         brr(i, 1) = Join(Application.Index(arr, i), "/")
  30.     Next
  31.     [e1].Resize(r, 5) = ""
  32.     [e1].Resize(r) = brr
  33. End Sub
复制代码

工作簿2.zip

7.21 KB, 下载次数: 8

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-7-12 22:05 | 显示全部楼层    本楼为最佳答案   
1、分离成五列;2、按各列排序;3、恢复成一列。
  1. Sub tt()
  2.     arr = [a1].CurrentRegion
  3.     r = UBound(arr)
  4.     ReDim brr(1 To r, 10)
  5.     For i = 1 To r
  6.         xrr = Split(arr(i, 1), "/")
  7.         For j = 0 To UBound(xrr)
  8.             brr(i, j) = xrr(j)
  9.         Next
  10.     Next
  11.     [e1].Resize(r, 5) = brr    '辅助数组
  12.     cx = Array(3, 1, 2, 4, 5)    '排序各列的先后次序
  13.     With ActiveSheet.Sort        '对辅助数组排序
  14.         .SortFields.Clear
  15.         For x = 0 To UBound(cx)
  16.             c = cx(x)        '参与排序的列
  17.             .SortFields.Add Key:=Cells(1, c + 4), Order:=xlAscending
  18.         Next
  19.         .SetRange [e1].Resize(r, 5)
  20.         .Header = xlGuess
  21.         .MatchCase = False
  22.         .Orientation = xlTopToBottom
  23.         .SortMethod = xlPinYin
  24.         .Apply
  25.     End With
  26.     arr = [e1].Resize(r, 5)       '辅助数组恢复成原始格式
  27.     ReDim brr(1 To r, 1 To 1)
  28.     For i = 1 To r
  29.         brr(i, 1) = Join(Application.Index(arr, i), "/")
  30.     Next
  31.     [e1].Resize(r, 5) = ""
  32.     [e1].Resize(r) = brr
  33. End Sub
复制代码

工作簿2.rar

18.97 KB, 下载次数: 7

回复

使用道具 举报

 楼主| 发表于 2016-7-13 10:06 | 显示全部楼层
grf1973 发表于 2016-7-12 22:05
1、分离成五列;2、按各列排序;3、恢复成一列。

谢谢了,效果能实现了,不过我想问下  .SortFields.Add Key:=Cells(1, c + 4), Order:=xlAscending这句是什么意思啊,特别是c+4是什么意思啊,求解释下哈
回复

使用道具 举报

发表于 2016-7-13 20:12 | 显示全部楼层
cx = Array(3, 1, 2, 4, 5)
c=cx(x)
x=0,c=3,c+4=7,G列
x=1,c=1,c+4=5,E列
.....................,F列
.....................,H列
.....................,I列
即按G,E,F,H,I列的次序分别排序
Order:=xlAscending表示按正序排。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 20:47 , Processed in 0.431064 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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