Хотя вопрос сам по себе минимальный, я все же хотел бы на него ответить. Если вы не позаботились о том, чтобы поменять местами S
и s
, чем:
Sub Test()
Dim x As Long
Dim str As String: str = "Somestring"
With CreateObject("System.Collections.ArrayList")
For x = 1 To Len(str)
.Add Mid(str, x, 1)
.Sort
Next
Debug.Print Join(.Toarray, "")
End With
End Sub
Результатов будет:
egimnorsSt
Если это не то, что вы хотите, он станет немного более сложный, я думаю, поскольку мы не можем использовать коды ASCII (S
= 83 и намного ниже, чем другие символы).
Это может быть не очень красиво, но попробуйте:
Sub Test()
Dim x As Long
Dim str As String, str_new As String
str = "abcdABCD"
With CreateObject("System.Collections.ArrayList")
For x = 1 To Len(str)
.Add Mid(str, x, 1)
.Sort
Next
str_new = Join(.Toarray, "")
End With
With CreateObject("vbscript.regexp")
.Global = True
.IgnoreCase = True
.Pattern = "([a-z])\1+"
If .Test(str_new) Then
For Each Match In .Execute(str_new)
str_new = Replace(str_new, Match, Application.Proper(Match)) 'Assuming no more than 1 of the same uppercase letters.
Next
End If
End With
Debug.Print str_new
End Sub
Результаты in:
AaBbCcDd
Другой вариант, если у вас есть ExcelO365 с новыми DA-функциями и значением в A1
:
=CONCAT(SORT(MID(A1,ROW(A1:INDEX(A:A,LEN(A1))),1)))
Это фактически вернет egimnorSst