Maybe :
Private Sub QuickSort(varr1ay As Variant, inLow As Long, inHi As Long)
Dim pivot As Variant, tmpSwap As Variant, tmpLow As Long, tmpHi As Long
tmpLow = inLow
tmpHi = inHi
pivot = varr1ay((inLow + inHi) \ 2)
While (tmpLow <= tmpHi)
While (varr1ay(tmpLow) < pivot And tmpLow < inHi): tmpLow = tmpLow + 1: Wend
While (pivot < varr1ay(tmpHi) And tmpHi > inLow): tmpHi = tmpHi - 1: Wend
If (tmpLow <= tmpHi) Then
tmpSwap = varr1ay(tmpLow)
varr1ay(tmpLow) = varr1ay(tmpHi)
varr1ay(tmpHi) = tmpSwap
tmpLow = tmpLow + 1
tmpHi = tmpHi - 1
End If
Wend
If (inLow < tmpHi) Then QuickSort varr1ay, inLow, tmpHi
If (tmpLow < inHi) Then QuickSort varr1ay, tmpLow, inHi
End Sub
Sub Test()
Dim coll As New Collection, arr1(), arr2(), i As Long, j As Long, k As Long, v
With Range("A1").CurrentRegion
arr1 = .Value
On Error Resume Next
For j = 1 To UBound(arr1, 2)
For i = 1 To UBound(arr1, 1)
coll.Add Key:=CStr(arr1(i, j)), Item:=arr1(i, j)
Next i
Next j
On Error GoTo 0
ReDim arr2(1 To coll.Count)
k = 0
For Each v In coll
k = k + 1
arr2(k) = v
Next v
QuickSort arr2, 1, UBound(arr2)
ReDim arr1(1 To UBound(arr1, 1), 1 To UBound(arr1, 2))
k = 0
For j = 1 To UBound(arr1, 2)
For i = 1 To UBound(arr1, 1)
k = k + 1
If k > UBound(arr2) Then GoTo skipper
arr1(i, j) = arr2(k)
Next i
Next j
skipper:
.Offset(, 7).Value = arr1
End With
End Sub
Bookmarks