|
|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
Option Explicit
Sub MySort2()
Dim ar, d As Object, i&, k&, y&
Set d = CreateObject("Scripting.Dictionary")
ar = Range("F4").CurrentRegion
For i = 2 To UBound(ar)
If Len(ar(i, 1)) Then
For y = 2 To UBound(ar)
If Len(ar(y, 2)) Then: k = k + 1: d(ar(i, 1) & "|" & ar(y, 2)) = k
Next
End If
Next
ar = Range("B4").CurrentRegion.Resize(, 4)
For i = 2 To UBound(ar)
y = d(ar(i, 1) & "|" & ar(i, 2)): If y = 0 Then y = k + 1
ar(i, 4) = y
Next
QuickSort ar, 2, i - 1, 1, UBound(ar, 2), UBound(ar, 2)
Range("B4").Resize(UBound(ar), 3) = ar
Set d = Nothing
End Sub
Sub QuickSort(br, t As Long, b As Long, l As Long, r As Long, k As Long)
Dim i As Long, j As Long, x As Long, y As Long, p As Long, v
i = t: y = b: p = br((t + b) \ 2, k)
While i <= y
Do While i < b
If br(i, k) < p Then i = i + 1 Else Exit Do
Loop
Do While y > t
If br(y, k) > p Then y = y - 1 Else Exit Do
Loop
If i < y Then
For x = l To r
v = br(i, x): br(i, x) = br(y, x): br(y, x) = v
Next
i = i + 1: y = y - 1
Else
If i = y Then i = i + 1: y = y - 1
End If
Wend
If i < b Then QuickSort br, i, b, l, r, k
If y > t Then QuickSort br, t, y, l, r, k
End Sub |
|