返回列表 上一主題 發帖

大量資料排名

回復 1# oak0723-1

不一樣的解法有比3#再提升一點點效率,請測試看看,謝謝

Sub test2()
Dim Arr, xD, a, T, i&
Set xD = CreateObject("Scripting.Dictionary")
Tm = Timer
Arr = Range("h6:h" & Cells(Rows.Count, 8).End(xlUp).Row)
For i = 1 To UBound(Arr)
    T = Arr(i, 1): If T <> "" Then xD(T) = ""
Next
For i = 1 To xD.Count
    a = Application.Large(xD.keys, i)
    n = n + 1: xD(a) = n
Next
For i = 1 To UBound(Arr)
    T = Arr(i, 1)
    If T = "" Then Arr(i, 1) = 0: GoTo 99
    Arr(i, 1) = xD(T)
99: Next
Range("j6").Resize(UBound(Arr)) = Arr
MsgBox Timer - Tm
End Sub

TOP

回復 5# oak0723-1

1.前後都有數據的空白儲存格-->顯示0,不列入排名
2.數據結束後的空白儲存格-->不列入排名,不作動作,依然是空白
>> 3#程式有符合上述條件,謝謝

TOP

回復 9# samwang


    原來是j6公式卡住整體的運算
謝謝你

TOP

回復 6# oak0723-1

移除J6 公式再執行程式就可以,請測試看看,謝謝

TOP

回復 7# oak0723-1


    是否你本身的公式導致? 可改為手動重算試試。

1100927-排名.png (51.77 KB)

1100927-排名.png

TOP

回復 2# ikboy
你好
謝謝你的熱心協助
這個程式在重複執行,就是不關閉重新開啟,而直接更改數據,使用新的1組數據(內容和數據數量都不同)再執行,速度會更慢更容易當機

TOP

回復 3# samwang


    你好,感謝你願意熱心協助
我執行後發現

不重新開啟檔案情況下更動數據後再執行程式,發現執行速度會更慢檔案更容易當機

Image 7.jpg (199.91 KB)

Image 7.jpg

1100927-排名01-3.rar (960.08 KB)

TOP

回復 4# samwang


    抱歉我沒描述清楚
內容空白有2種情形
1.前後都有數據的空白儲存格-->顯示0,不列入排名
2.數據結束後的空白儲存格-->不列入排名,不作動作,依然是空白

Image 3.jpg (63.93 KB)

前後都有數據的空白儲存格

Image 3.jpg

Image 5.jpg (74.09 KB)

數據結束後的空白儲存格

Image 5.jpg

TOP

回復 1# oak0723-1


請問H欄數值空白時(不是0), 排名為 0嗎?

TOP

回復 1# oak0723-1

請測試看看,謝謝
Sub test()
Dim Arr, Brr, xD, T
Set xD = CreateObject("Scripting.Dictionary")
With Range("h6:h" & Cells(Rows.Count, 8).End(xlUp).Row)
    Brr = .Value
    .Sort key1:=.Item(1), Order1:=2, Header:=2
    Arr = .Value
    .Value = Brr
End With
For i = 1 To UBound(Arr)
    T = Arr(i, 1): If T = "" Then GoTo 98
    If xD(T) = "" Then: n = n + 1: xD(T) = n
98: Next
For i = 1 To UBound(Brr)
    T = Brr(i, 1)
    If T = "" Then Brr(i, 1) = 0: GoTo 99
    Brr(i, 1) = xD(T)
99: Next
Range("i6").Resize(UBound(Brr)) = Brr
End Sub

TOP

        靜思自在 : 不要小看自己,因為人有無限的可能。
返回列表 上一主題