Use this UDF like:
=get_unique_sorted(A2)
Option Explicit
Dim UniqueItms As New Collection
Function get_unique_sorted(s As String)
Dim i As Long, j As Long, k As Long, m As Long, nWords As Long, lenMax As Long
Dim w As Variant, arr As Variant, b As Variant, c As Variant, t As Variant
Dim s1 As String
arr = Split(s, " ")
nWords = UBound(arr) + 1
For Each w In arr
If Len(w) > lenMax Then lenMax = Len(w)
Next
ReDim b(1 To lenMax, 1 To nWords)
ReDim c(1 To lenMax * nWords, 1 To 1)
s = Left(s, Len(s))
For Each w In Split(s, " ")
i = Len(w)
For j = 1 To UBound(b, 2)
If b(i, j) = "" Then
b(i, j) = w
Exit For
End If
Next
Next
m = 1
For i = UBound(b, 1) To 1 Step -1
Set UniqueItms = Nothing
For j = 1 To UBound(b, 2)
If b(i, j) = "" Then Exit For
Call AddWord(b(i, j))
Next
For Each t In UniqueItms
c(m, 1) = t
m = m + 1
Next
Next
get_unique_sorted = Join(Application.Transpose(c), " ")
End Function
Sub AddWord(itm)
Dim x As Long
For x = 1 To UniqueItms.Count
Select Case StrComp(UniqueItms(x), itm, vbTextCompare)
Case 0: Exit Sub
Case 1: UniqueItms.Add itm, Before:=x: Exit Sub
End Select
Next
UniqueItms.Add itm
End Sub
Bookmarks