This does both in one routine
Sub test()
Dim delimitedString As String, Delimiter As String
Dim AlteredString As String
Dim SortedArrayOfNonDuplicates As Variant
Delimiter = "|"
delimitedString = "a|x|b|b|a|c|c|d|a|x|a|a"
AlteredString = SortString(delimitedString, Delimiter)
MsgBox AlteredString: ' a|b|c|d|x
SortedArrayOfNonDuplicates = Split(AlteredString, Delimiter)
End Sub
Function SortString(delimitedString As String, Optional Delimiter As String = " ")
Dim strLeft As String, strRight As String
Dim subStrings As Variant, oneSub As Variant
Dim Pivot As String
subStrings = Split(delimitedString, Delimiter)
Pivot = subStrings(0)
For Each oneSub In subStrings
If oneSub < Pivot Then
strLeft = strLeft & Delimiter & oneSub
ElseIf Pivot < oneSub Then
strRight = strRight & Delimiter & oneSub
End If
Next oneSub
strLeft = Mid(strLeft, 2): strRight = Mid(strRight, 2)
SortString = Pivot
If strLeft <> vbNullString Then
SortString = SortString(strLeft, Delimiter) & Delimiter & SortString
End If
If strRight <> vbNullString Then
SortString = SortString & Delimiter & SortString(strRight, Delimiter)
End If
End Function
Bookmarks