我有这个脚本,它排序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为这个社区做出贡献!
答案 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
澄清一下,排序后的情况如下:
如有必要,您可以将第3列缩小到零长度,因此它是不可见的。
答案 1 :(得分:1)
如果您发现,MT-099
有一个前导零,以确保它在MT-100
之前进行排序,而MT-102
没有前导零,以确保它在MT-1000
之前排序。< / p>
您需要修改数据以支持4位数,左侧零填充数字,或者想出一种方法将数字部分拆分为不同的列以进行排序。