返回列表 上一主題 發帖

大量資料排名

回復 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

回復 1# oak0723-1


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

TOP

回復 6# oak0723-1

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

TOP

回復 5# oak0723-1

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

TOP

回復 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

        靜思自在 : 並非有錢魷是快樂,問心無愧心最安。
返回列表 上一主題