|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
'混合排序也是可以变通一下的。。。Sub test()
Dim ar, i
Dim list: Set list = CreateObject("system.collections.arraylist")
ar = Array("1", 7, "8", "A", 3, "b", 5, "你好")
For i = 0 To UBound(ar)
list.Add CStr(ar(i)) '用Cstr转换成文本
Next
list.Sort
For i = 0 To list.Count - 1
Debug.Print list(i)
Next
End Sub
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'顺便补充两个你没提到的方法,Getrange 和Setrange,类似于其他语言里的数组切片操作。
Getrange:
类似于VBA的mid函数,只不过mid是对字符串,而Getrange是对动态数组。
Setrange:
类似于VBA的Replace,同样replace是对字符串,而Setrange是对动态数组。
下面是个示例,只是为了说明两个方法的使用,其他无意义。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sub list切片() '元素交换位置a,b,c,d 变成c,d,a,b
Dim Mylst As Object, mylst2 As Object, x As Object, y As Object, i
Set Mylst = CreateObject("System.Collections.Arraylist")
Mylst.Add "a": Mylst.Add "b": Mylst.Add "c": Mylst.Add "d"
Set mylst2 = Mylst.Clone '克隆一个list
Set x = Mylst.GetRange(2, 2) '切片操作,获取mylst后两个数(一参为起始位置,二参为个数,类似于Mid的写法)
Set y = mylst2.GetRange(0, 2) '获取mylst2的前两个数
Mylst.SetRange 0, x '替换a,b 为 c,d
Mylst.SetRange 2, y '同样可以用截取的mylst2的片段来替换。替换c,d 为 a,b
For i = 0 To Mylst.Count - 1 '替换后,abcd就变成了cdab
Debug.Print Mylst(i)
Next
End Sub
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最后,多说一句,这个对象的使用,要注意的细节挺多,同在VBA下嵌入不同的结构(比如递归,貌似不能保存每层的状态)时使用不太一样。还有就是从VBA数组转换成Arraylist时,有时你会发现加不进去,这时就要转换了。。。,不过就像你说的用的人少,很少人会关注这些的,但用来做简单的排序还是挺方便的。
|
评分
-
8
查看全部评分
-
|