Here is one way.
Sub Test()
Dim Text As String
Dim startBracket As Long
Dim endBracket As Long
Dim index As Long
Dim useChr As String
Dim delimiter As String
Text = ActiveCell.Text
delimiter = ","
useChr = ""
For index = 128 To 255
If InStr(Text, Chr(index)) = 0 Then
useChr = Chr(index)
Exit For
End If
Next
If Len(useChr) = 0 Then
MsgBox "Can not find unique temporary character. Text not sorted", vbExclamation
Exit Sub
End If
endBracket = 1
startBracket = InStr(endBracket, Text, "(")
Do While startBracket > 0
endBracket = InStr(startBracket, Text, ")")
Mid(Text, startBracket + 1, endBracket - startBracket - 1) = Replace(SortText(Mid(Text, startBracket + 1, endBracket - startBracket - 1), delimiter, xlAscending, vbTextCompare), delimiter, useChr)
startBracket = InStr(endBracket, Text, "(")
Loop
Text = Replace(SortText(Text, delimiter, xlAscending, vbTextCompare), useChr, delimiter)
ActiveCell.Offset(0, 1) = Text
End Sub
Function SortText(Text As String, Optional delimiter As String = ",", Optional SortOrder As XlSortOrder, Optional CompareMethod As VbCompareMethod = VbCompareMethod.vbBinaryCompare) As String
Dim items As Variant
Dim tempItem As Variant
Dim returnValue As String
Dim outerIndex As Long
Dim innerIndex As Long
Dim lowerArraySize As Long
Dim upperArraySize As Long
Dim arrayStep As Long
items = Split(Text, delimiter)
If SortOrder = xlAscending Then
lowerArraySize = LBound(items)
upperArraySize = UBound(items)
arrayStep = 1
Else
lowerArraySize = UBound(items)
upperArraySize = LBound(items)
arrayStep = -1
End If
For outerIndex = lowerArraySize To upperArraySize Step arrayStep
For innerIndex = outerIndex To upperArraySize Step arrayStep
If StrComp(items(innerIndex), items(outerIndex), CompareMethod) < 0 Then
tempItem = items(outerIndex)
items(outerIndex) = items(innerIndex)
items(innerIndex) = tempItem
End If
Next
Next
returnValue = Join(items, delimiter)
SortText = returnValue
End Function
In your examples you are not doing a case sensitive check. The function has parameters to handle sort order and type of comparison.
Bookmarks