Excel精英培训网

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

[已解决]请教一个排序的问题

[复制链接]
发表于 2010-5-31 13:38 | 显示全部楼层 |阅读模式

请教一个排序的问题,说明在表中,能用V更好,谢谢各位指教。

eA6waUzS.rar (4.52 KB, 下载次数: 2)

发表于 2010-5-31 13:40 | 显示全部楼层

数据在输入时可以使用自定义格式,然后直接排序就可以了。
回复

使用道具 举报

 楼主| 发表于 2010-5-31 13:55 | 显示全部楼层

QUOTE:
以下是引用wayy在2010-5-31 13:40:00的发言:
数据在输入时可以使用自定义格式,然后直接排序就可以了。

自定义格式,怎么写?谢谢

回复

使用道具 举报

发表于 2010-5-31 14:21 | 显示全部楼层    本楼为最佳答案   

Sub 排序()
    Dim ArrYS, i&, j%, Temp1, Temp2, Rng As Range, Temp$
    Set Rng = Range("A1:B" & Range("A65536").End(xlUp).Row)
    ArrYS = Rng
    Temp = "一二三四五六七八九十"
    '格式化各班级
    For i = 2 To UBound(ArrYS)
        Temp1 = Int(InStr(1, Temp, Left(ArrYS(i, 2), 1)))
        Temp2 = Right(ArrYS(i, 2), Len(ArrYS(i, 2)) - 3)
        ArrYS(i, 2) = Temp1 * 100 + Int(Left(Temp2, Len(Temp2) - 1))
    Next i
    Rng = ArrYS
    '排序。利用系统排序
    Rng.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("A2") _
        , Order2:=xlAscending, Header:=xlYes
    '恢复原来班级
    ArrYS = Rng
    For i = 2 To UBound(ArrYS)
        Temp1 = Mid(Temp, ArrYS(i, 2) \ 100, 1) & "年级"
        ArrYS(i, 2) = Temp1 & (ArrYS(i, 2) Mod 100) & "班"
    Next i
    Rng = ArrYS
End Sub
回复

使用道具 举报

 楼主| 发表于 2010-5-31 14:27 | 显示全部楼层

感谢4楼老师的回答,就是不理解,可以注一下每行的注释吗?谢谢
回复

使用道具 举报

发表于 2010-5-31 14:33 | 显示全部楼层

Sub 排序()
    Dim ArrYS, i&, j%, Temp1, Temp2, Rng As Range, Temp$
    Set Rng = Range("A1:B" & Range("A65536").End(xlUp).Row)
    ArrYS = Rng
    Temp = "一二三四五六七八九十"
    '格式化各班级
    For i = 2 To UBound(ArrYS)
        Temp1 = Int(InStr(1, Temp, Left(ArrYS(i, 2), 1)))   '取左边大写一二三四等转化为数字
        Temp2 = Right(ArrYS(i, 2), Len(ArrYS(i, 2)) - 3)    '取班级数字
        ArrYS(i, 2) = Temp1 * 100 + Int(Left(Temp2, Len(Temp2) - 1))    '转化年纪班级为数字=年级*100+班级
    Next i
    Rng = ArrYS '将上述转化结果再写入工作表
    '排序。利用系统排序
    Rng.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("A2") _
        , Order2:=xlAscending, Header:=xlYes
    '恢复原来班级
    ArrYS = Rng '得到排序后的结果
    For i = 2 To UBound(ArrYS)
        Temp1 = Mid(Temp, ArrYS(i, 2) \ 100, 1) & "年级"    '将年级转化为大写数字
        ArrYS(i, 2) = Temp1 & (ArrYS(i, 2) Mod 100) & "班"  '将年级班级写入
    Next i
    Rng = ArrYS '输出最终结果
End Sub
回复

使用道具 举报

 楼主| 发表于 2010-5-31 14:34 | 显示全部楼层

谢谢老师,慢慢领会学习。谢了
[此贴子已经被作者于2010-5-31 14:34:19编辑过]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 22:16 , Processed in 0.329792 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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