VBA里面沒有現(xiàn)成的Sort方法可以使用,VBA里面要對數(shù)組進(jìn)行排序,現(xiàn)有的通常做法:?
1,通過單元格賦值以后利用工作表里的Sort方法進(jìn)行排序,?
2,通過SQL實現(xiàn),也需要調(diào)用單元格區(qū)域存放數(shù)據(jù),?
3,直接寫循環(huán)語句通過算法來實現(xiàn)。
除了上述方法以外,借助一些其他語言工具與VBA相結(jié)合,也能利用現(xiàn)成的排序功能來實現(xiàn)數(shù)組排序,而不需要借助表格。?
例如JavaScript:
JavaScript里面也有Sort方法,可以拿來現(xiàn)成使用,示例代碼如下:?
Sub文本升序()
Set js = CreateObject(“msscriptcontrol.scriptcontrol”)?
js.Language = “javascript”?
arr = Application.Transpose(Range(“A1:A10”))?
temp = Join(arr, “,”)?
js.addcode “function aa(bb){js=bb.split(‘,’);js.sort();return js;}”?
sortarr = js.eval(“aa(‘” & temp & “’)”)?
Debug.Print sortarr?
End Sub?
復(fù)制代碼?
Sub文本降序()
Set js = CreateObject(“msscriptcontrol.scriptcontrol”)?
js.Language = “javascript”?
arr = Application.Transpose(Range(“A1:A10”))?
temp = Join(arr, “,”)?
js.addcode “function aa(bb){js=bb.split(‘,’);js.sort();js.reverse();return js;}”?
sortarr = js.eval(“aa(‘” & temp & “’)”)?
Debug.Print sortarr?
End Sub?
復(fù)制代碼?
Sub數(shù)值升序()
Set js = CreateObject(“msscriptcontrol.scriptcontrol”)?
js.Language = “javascript”?
arr = Application.Transpose(Range(“A1:A10”))?
temp = Join(arr, “,”)?
js.addcode “function aa(bb){js=bb.split(‘,’);js.sort(function(a,b){return a-b;});return js;}”?
sortarr = js.eval(“aa(‘” & temp & “’)”)?
Debug.Print sortarr?
End Sub?
復(fù)制代碼?
Sub數(shù)值降序()
Set js = CreateObject(“msscriptcontrol.scriptcontrol”)?
js.Language = “javascript”?
arr = Application.Transpose(Range(“A1:A10”))?
temp = Join(arr, “,”)?
js.addcode “function aa(bb){js=bb.split(‘,’);js.sort(function(a,b){return a-b;});js.reverse();return js;}”?
sortarr = js.eval(“aa(‘” & temp & “’)”)?
Debug.Print sortarr?
End Sub?
復(fù)制代碼
.NET里面有SortedList類也可以用來實現(xiàn)排序,但需要系統(tǒng)支持Framework
示例代碼如下:?
Sub Sortlist()?
Set objSortedlist = CreateObject(“System.Collections.Sortedlist”)?
For i = 1 To 10?
objSortedlist.Add Range(“A” & i).Value, Range(“A” & i).Value?
Next i?
For i = 0 To objSortedlist.Count - 1?
Debug.Print objSortedlist.GetKey(i)?
Next?
End Sub?
復(fù)制代碼
除了SortedList類,還有ArrayList也可以用
示例代碼如下:
Sub Arraylist()?
Set objArrayList = CreateObject(“System.Collections.ArrayList”)?
For i = 1 To 10?
objArrayList.Add Range(“A” & i).Value?
Next i?
objArrayList.Sort?
For i = 0 To objArrayList.Count - 1?
Debug.Print objArrayList(i)?
Next?
End Sub?
復(fù)制代碼