如何在单行中按字母顺序对字符串进行排序

How order a string in alphabetical order in a single row

提问人:Pepiniano 提问时间:11/10/2023 更新时间:11/11/2023 访问量:82

问:

基本上,我有一个带有分号(;)的字符串,以范围(“H2”)分隔,例如(Restrict;无反射;阿尔法;宇宙;n..).这需要是动态的,这意味着字符串可以在一行中包含四个以上的单词。

“预期结果应该是(Alpha;宇宙;无限制;限制;n..)在范围内 (“H2”)

Excel VBA 字符串 范围 (按字母顺序排列)

评论

0赞 Paul 11/10/2023
所以你有一个动态字符串(它可能会改变),但你也想对它进行排序并将结果放回单元格中?这是可行的,但通常不是一个好主意。将其分类到单独的单元格中是否可以接受?
0赞 Paul 11/10/2023
另外,哪个版本的 Excel?Excel-365 使很多事情变得更容易一些。

答:

0赞 Mayukh Bhattacharya 11/10/2023 #1

由于存在 Excel 标记并假设没有 Excel 约束,因此可以使用以下命令完成此操作TEXTSPLIT()

enter image description here


• 细胞中使用的配方B1

=SORT(TRIM(TEXTSPLIT(A1,,";",1)))

或者,在单元格内:

enter image description here


• 细胞中使用的配方B1

=TEXTJOIN("; ",,SORT(TRIM(TEXTSPLIT(A1,,";",1))))

警告:由于要求输出在单元格内生成,因此使用存在字符限制,即如果字符串超过 32767 个字符(单元格限制),则返回错误。下面是 MSFT 文档。因此,最好使用或按适合您的数据的行/列进行拆分。TEXTJOIN()TEXTJOIN()#VALUE!VBA


评论

0赞 Notus_Panda 11/10/2023
那不是(阿尔法;宇宙;无限制;限制),但;)啊 nvm,你还没有完成 TextJoin
0赞 Mayukh Bhattacharya 11/10/2023
@Notus_Panda我不明白?
1赞 Notus_Panda 11/10/2023
不,你很好,你的第一个解决方案不是 OP 想要的,但(现已编辑的)Textjoin 做到了。触发^^有点太快了
0赞 Mayukh Bhattacharya 11/10/2023
哦,是的,我正在编辑答案。有时很难理解OP在问什么。我发布的第一个答案也是因为 OP 说,范围而不是单元格,所以可能他们不清楚范围和单元格!
1赞 Paul 11/10/2023
OP 要求一个解决方案来对它进行分类,但我同意这是一个更好的选择(请参阅我对问题的评论)
0赞 Spectral Instance 11/11/2023 #2

下面是一种 VBA 方法

Sub sortCell(inp As Range)
    Dim arr
    arr = Strings.Split(inp.Value2, ";")
    
    Dim sList As Object
    Set sList = CreateObject("System.Collections.SortedList")
    
    Dim i As Long
    For i = 0 To UBound(arr)
        sList.Add CStr(arr(i)), Null
    Next i
    
    Dim result As String
    For i = 0 To UBound(arr)
        result = result & sList.getKey(i) & ";"
    Next i
    
    inp.Value2 = Strings.Left(result, Strings.Len(result) - 1)
End Sub

您可以拨打电话,例如

call sortCell(ActiveSheet.Range("H2"))