按字母顺序重新排列具有多个值的单元格

我有一个Excel文件,我有一个多个值的单元格,用逗号分隔。 例如:纽约,芝加哥,洛杉矶。 现在我想按照字体顺序重新排列这个单元格,比如:芝加哥,洛杉矶,纽约。 是否有捷径可寻?

尝试这个。 以下代码将读取列A值,并在列B给出所需的结果。

 Sub SortString() Dim MyArray As Variant, varSwap As Variant Dim i As Long, min As Long, max As Long, LastRow As Long Dim str As String Dim MyRange As Range Dim IsSwapped As Boolean LastRow = Cells(Rows.Count, "A").End(xlUp).Row Set MyRange = Range("A1:A" & LastRow) For Each cell In MyRange MyArray = Split(cell.Value, ",") min = LBound(MyArray) max = UBound(MyArray) - 1 Do IsSwapped = False For i = min To max If MyArray(i) > MyArray(i + 1) Then varSwap = MyArray(i) MyArray(i) = MyArray(i + 1) MyArray(i + 1) = varSwap IsSwapped = True End If Next max = max - 1 Loop Until Not IsSwapped For i = LBound(MyArray) To UBound(MyArray) Debug.Print MyArray(i) If str = "" Then str = Trim(MyArray(i)) Else str = str & ", " & Trim(MyArray(i)) End If Next i cell.Offset(0, 1).Value = str str = "" Next cell End Sub 

使用SPLIT函数首先将逗号分隔值列表存储在一个数组中,然后按照您希望的方式对数组进行sorting,然后使用JOIN函数再次创build逗号分隔值列表。

例如:

 myArray = SPLIT(Cell.Value, ",") Call SomeSortFunction(myArray) myString = JOIN(myArray, ",") Cell.Value = myString 

您需要将单元格中的值的string保存到函数中,然后通过逗号分隔列表进行循环:

 Array = Split(yourString, ",") 

然后循环通过它:

 For i = 0 To UBound(Array) 

要find每个值的第一个字母,我会使用类似于:

 Left(Array(i), Len(Array(i)) - 1) 

然后您可以按字母顺序sorting。 你可以使用SUBSTITUTE()函数来交换周围的值。

假设您的数据在A1中,请将文本用于具有分隔宽度的列,并select逗号作为分隔符。 当单元格被拆分时,将它们全部选中并按字母顺序sorting。 然后在不同的小区使用,

 =A1 & ", " & B1 & ", " C1 

等等。 如果你想在VBA(根据你的标签),这是一个很好的起点,将录制一个macros,然后编辑您的需要。

编辑

这绝不是什么好事,但它是使用VBA遍历每一行的起点。

 Dim i As Integer, lastRow As Integer, curRng As Range lastRow = Range("A10000").End(xlUp).Row For i = 1 To lastRow Cells(i, 1).Select Set curRng = Range(ActiveCell, ActiveCell.End(xlToRight)) curRng.Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=curRng, _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange curRng .Header = xlGuess .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With Next i