Option Explicit
Sub test2()
Dim ar, i&, j&, r&, dic As Object, strJoin$
Application.ScreenUpdating = False
Set dic = CreateObject("Scripting.Dictionary")
ar = [A1].CurrentRegion.Value
bSort ar, 1, UBound(ar), 1, UBound(ar, 2), 1
For i = 1 To UBound(ar)
strJoin = Join(Application.Index(ar, i), "|")
If Not dic.exists(strJoin) Then
dic(strJoin) = Empty
r = r + 1
For j = 1 To UBound(ar, 2)
ar(r, j) = ar(i, j)
Next j
End If
Next i
[H1].CurrentRegion.Clear
[H1].Resize(r, UBound(ar, 2)) = ar
Set dic = Nothing
Application.ScreenUpdating = True
Beep
End Sub
Function bSort(ByRef ar, ByVal iFirst&, ByVal iLast&, ByVal iLeft&, _
ByVal iRight&, ByVal iKey&, Optional isOrder As Boolean = True)
Dim i&, j&, k&, vTemp
For i = iFirst To iLast - 1
For j = iFirst To iLast + iFirst - 1 - i
If ar(j, iKey) <> ar(j + 1, iKey) Then
If ar(j, iKey) < ar(j + 1, iKey) Xor isOrder Then
For k = iLeft To iRight
vTemp = ar(j, k)
ar(j, k) = ar(j + 1, k)
ar(j + 1, k) = vTemp
Next
End If
End If
Next j
Next i
End Function
|