相关知识点:
Range.Sort: VBA 内置的排序方法,15个参数。(缺点只有3个关键字排序)
(Key1,Order1,Type,Key2,Order2,Key3,Order3,Header,OrderCustom,MatchCase,Orientation,SortMethod,DataOption1,DataOption2,DataOption3)
OrderCustom 自定义排序规则,自定义规则的位置序号+1,即采用的排序条目序号+1,因为1代表不使用自定义排序,普通排序;2代表第一个自定义序列;3代表第二个自定义序列……n+1代表第n个自定义规则。
注意:需要排序的序列关键字必须与自定义序列的关键字一致才可以排序,剩余的可能会默认排序。
VBA中自定义序列的标准写法:
Application.CustomListCount属性:代表当前Execl中全部自定义序列的总数。
Array(x1,x2,x3,……):生成一个数组,第一个元素是x1,第二个是x2……可以用该函数方便的给一个动态数组赋值。比如:a=Array(3,5,7,8.10.12)
例1 按照自定义排序汉字大写数字排序(依赖于电脑是否有此规则和顺序)
Sub demo()
Dim r as Range
Set r=Range(“b1:b7”)
r.sort key1:=cells(1,2), ordercustom:=10 ‘自定义规则的位置按照1234……排序的序号+1
End Sub
例2 按照自定义排序汉字大写数字排序(添加自定义序列在单元格里)
Sub demo2()
Dim r as Range
Application.AddCustomList Worksheets(1).Range(“d10:d16”) ‘指定Range对象作为序列
Set r=Range(“b1:b7”)
r.sort key1:=cells(1,2), ordercustom:=application.CustomListCount+1 ‘编号+1
application.DeleteCustomList Application.CustonListCount ‘删除自定义序列,现在编号已经变了不需+1
End Sub
例3 按照自定义排序汉字大写数字排序(添加自定义序列在程序里)
Sub demo3()
Dim r as Range,mylist(7) ‘动态数组因此不可以提前赋值应为mylist()或者是变体类型变量
Mylist(0)=”壹”: Mylist(1)=”贰”: Mylist(2)=”叁”: Mylist(3)=”肆”
Mylist(4)=”伍”: Mylist(5)=”陆”: Mylist(6)=”柒”: Mylist(7)=”捌”
‘以上红色数组赋值可以直接写:
‘mylist=Array(“壹”,”贰”,”叁”,”肆”,”伍”,”陆”,”柒”,”捌”)
Application.AddCustomList mylist ‘指定数组作为序列
Set r=Range(“b1:b7”)
r.sort key1:=cells(1,2), ordercustom:=application.CustomListCount+1 ‘编号+1
application.DeleteCustomList Application.CustonListCount ‘删除自定义序列,现在编号已经变了不需+1
End Sub