JavaScript排序法 - 数字降序
JS代码实现数组数字降序排序有两种方法。
function sortarr(para)
{
arr=para.split(',');
arr.sort
(
function cmp(a,b)
{return a-b;}
);
arr.reverse();
return arr;
}
JS代码解析:
arr.reverse()
就对数组进行倒序排列,也就是又升序变成降序。
接下来就可以在VBA中调用JS代码。
Sub JSSortNum_DSC1()
Dim aintData(1 To 10) As Variant
Dim strNum As String
Dim i As Integer
Dim intLB As Integer
Dim intUB As Integer
Dim objJS As Object
Dim strSortedNum As String
intLB = LBound(aintData)
intUB = UBound(aintData)
For i = intLB To intUB
aintData(i) = Application.WorksheetFunction.RandBetween(1, 100)
Next i
strNum = Join(aintData, ",")
Debug.Print "Original Data: " & strNum
Set objJS = CreateObject("msscriptcontrol.scriptcontrol")
objJS.Language = "javascript"
objJS.addcode "function sortarr(para){arr=para.split(',');arr.sort(function cmp(a,b){return a-b;});arr.reverse();return arr;}"
strSortedNum = objJS.eval("sortarr('" & strNum & "')")
Debug.Print "After Sort(DSC): " & strSortedNum
End Sub
运行代码结果如下。
Original Data: 72,8,53,2,38,51,39,63,77,33
After Sort: 77,72,63,53,51,39,38,33,8,2
将JS代码中的a-b
改为b-a
,同样也可以实现数字降序排序。
Sub JSSortNum_DSC2()
Dim aintData(1 To 10) As Variant
Dim strNum As String
Dim i As Integer
Dim intLB As Integer
Dim intUB As Integer
Dim objJS As Object
Dim strSortedNum As String
intLB = LBound(aintData)
intUB = UBound(aintData)
For i = intLB To intUB
aintData(i) = Application.WorksheetFunction.RandBetween(1, 100)
Next i
strNum = Join(aintData, ",")
Debug.Print "Original Data: " & strNum
Set objJS = CreateObject("msscriptcontrol.scriptcontrol")
objJS.Language = "javascript"
objJS.addcode "function sortarr(para){arr=para.split(',');arr.sort(function cmp(a,b){return b-a;});return arr;}"
strSortedNum = objJS.eval("sortarr('" & strNum & "')")
Debug.Print "After Sort(DSC): " & strSortedNum
End Sub
相关文章链接:
数组排序系列(1)-- 冒泡法
数组排序系列(2)-- 极值法
数组排序系列(3)-- 工作表排序法
数组排序系列(4)-- JavaScript排序法(数字升序)
数组排序系列(5)-- JavaScript排序法(数字降序)
数组排序系列(6)-- JavaScript排序法(字符排序)