Excel宏未正确排序

时间:2015-03-19 15:13:11

标签: excel vba sorting excel-vba

我有这个脚本,它排序MT-001 - MT-999最近我又添加了两个条目" MT-1000"和" MT-1001"这就是我的宏排序......

MT-099
MT-100
MT-1000
MT-1001
MT-102
MT-103

我的排序宏如下:

Sub FILTERMT()
    Selection.AutoFilter Field:=2, Criteria1:="=*MT*", Operator:=xlAnd
    Range("A7:BZ65536").Sort Key1:=Range("B6"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
End Sub

有人可以发布纠正此错误的代码吗? THX为这个社区做出贡献!

2 个答案:

答案 0 :(得分:2)

选择第3列,如果需要,甚至可以是右边的多列。

使用以下公式填充此列的单元格:

=RIGHT(B6;LEN(B6)-FIND("-");B6))*1

在这里,我假设列表的顶部(“MT-099”)位于字段B6。

right表达式会删除字符串中的数字。 *1是真正转换为数字。您只需要将数字视为数字,以便以正确的方式排序。

选择公式,例如在C6中,将内容向下复制到列表的最后一行。

然后只需更改您的代码;在这里,我假设你的新专栏是C:

Range("A7:BZ65536").Sort Key1:=Range("C6"), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal

澄清一下,排序后的情况如下:

enter image description here

如有必要,您可以将第3列缩小到零长度,因此它是不可见的。

答案 1 :(得分:1)

如果您发现,MT-099有一个前导零,以确保它在MT-100之前进行排序,而MT-102没有前导零,以确保它在MT-1000之前排序。< / p>

您需要修改数据以支持4位数,左侧零填充数字,或者想出一种方法将数字部分拆分为不同的列以进行排序。