您的位置:首页 > 编程语言 > VB

全民一起VBA实战篇 专题2 第四回 排序规则能由自己决定 数组赋值可用Array化简

2019-06-24 15:46 1491 查看

 

相关知识点:

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中自定义序列的标准写法:

  1. 使用Application.AddCustomList添加规则(序列)
  2. 在Range.Sort中设定Ordercustom为该序列的编号+1
  3. 使用Application.DeleteCustonList在Execl中删除该序列,恢复用户在运行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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐