陣列排序系列(3)
阿新 • • 發佈:2018-12-13
####工作表排序法
前面兩篇文章分享了兩種純演算法實現的排序方法。這次介紹一個其他型別的方法,Excel的排序功能非常簡單實用,即使是小白使用者也可以熟練操作,在VBA中藉助工作表排序也就成為一個實現數值排序的好方法。
Sub SortInSheet() Dim aintData(1 To 10) As Variant Dim avntData As Variant Dim i As Integer Dim intLB As Integer Dim intUB As Integer Dim rngData As Range intLB = LBound(aintData) intUB = UBound(aintData) For i = intLB To intUB aintData(i) = Application.WorksheetFunction.RandBetween(1, 100) Next i Debug.Print "Original Data: " & Join(aintData, ",") With ActiveSheet .Columns(1).Clear Set rngData = .[a1].Resize(intUB - intLB + 1, 1) rngData.Value = Application.Transpose(aintData) With .Sort .SortFields.Clear .SortFields.Add Key:=rngData, _ SortOn:=xlSortOnValues, _ Order:=xlAscending, _ DataOption:=xlSortNormal .SetRange rngData .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End With avntData = Application.Transpose(rngData.Value) Debug.Print "After Sort: " & Join(avntData, ",") End Sub
執行程式碼結果如下。
Original Data: 72,8,53,2,38,51,39,63,77,33 After Sort: 2,8,33,38,39,51,53,63,72,77
程式碼解析: 第15行程式碼清空工作表的第1列用於後續的排序操作。 第16行程式碼根據陣列元素的個數確定單元格區域的大小。 第17行程式碼將數值元素寫入單元格區域。 第18行到第30行程式碼呼叫工作表的排序功能。 第19行程式碼清空排序欄位。 第20行到第23行程式碼新增排序欄位,其中Order引數指定為升序排序。 第24行程式碼設定排序單元格區域。 第25行程式碼指定資料區域不包含表頭。 第21行程式碼指定忽略大小先區別。 第29行程式碼執行排序操作。 第32行程式碼將排序後的資料載入到陣列中。
此示例程式碼實現的是升序排序,如需使用降序,那麼只需要修改第22行程式碼如下。
Order:=xlDescending
相關文章連結: