返回列表 上一主題 發帖

大量資料排名

本帖最後由 ML089 於 2021-10-19 16:44 編輯

10萬筆資料,唯一值有1萬筆,排名比較
排序採用 Range.Sort   執行時間  0.3"
排序採用 System.collections.arraylist    執行時間  0.33"
排序採用 Large函數 執行時間 30"
結論 Range.Sort 也不慢

原資料10萬筆只有6筆是唯一值,這樣測不出效率,
其實唯一值小於10筆用函數也可以 0.3",唯一值為1萬筆需要46秒

Sub 排名AmoKat()
    tm = Timer
    Set xD = CreateObject("Scripting.Dictionary")
    Arr = Range([h6], [h1].Cells(Rows.Count, 1).End(xlUp))
    For i = 1 To UBound(Arr): xD(Arr(i, 1)) = 0: Next i '字典產生唯一值
    With [i6].Resize(xD.Count) '利用 Range.Sort 排序
        .Value = Application.Transpose(xD.keys)
        .Sort Key1:=.Item(1), Order1:=xlDescending, Header:=xlNo
    End With
    For i = 1 To xD.Count: xD(Cells(5 + i, "I").Value) = i: Next i '排序序號寫入字典
    For i = 1 To UBound(Arr)    '查詢字典排列序號
        If Arr(i, 1) = "" Then Arr(i, 1) = 0 Else Arr(i, 1) = xD(Arr(i, 1))
    Next i
    [i6].Resize(UBound(Arr)) = Arr '貼上資料
    Set xD = Nothing: Erase Arr
    Debug.Print Timer - tm    '0.30"
End Sub
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

        靜思自在 : 犯錯出懺悔心,才能清淨無煩惱。
返回列表 上一主題