我一直试图对一系列细胞进行排序,但似乎无法得到我想要的结果。单元格范围包含如下值:
1-11-1
1-10-2
1-12-1
1-11-2
1-10-1
1-12-2
我正在寻找的结果是:
1-10-1
1-11-1
1-12-1
1-10-2
1-11-2
1-12-2
我尝试了多种不同的自定义排序(### - ### - ###和“0,1,2,3,4,5,6,7,8,9, - ,0,1, 2,3,4,5,6,7,8,9, - ,0,1,2,3,4,5,6,7,8,9“),但无法得到正确的结果。是否有可能获得我想要的排序结果或者是否需要宏?非常感谢任何帮助。
答案 0 :(得分:0)
按" - "分割文字进入专栏。
按列对数据进行排序:1,3和2.在4.列中添加公式以将三列中的文本连接成一个字符串;)
这就是全部!
这是一个简单的宏。填写免费更改:
Sub Macro1()
Dim rng As Range, lstRow As Integer
Set rng = ActiveSheet.UsedRange
lstRow = rng.Rows.Count
rng.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="-", _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
ActiveSheet.UsedRange.Select
ActiveSheet.Sort.SortFields.Clear
ActiveSheet.Sort.SortFields.Add Key:=Range("A1:A" & lstRow) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveSheet.Sort.SortFields.Add Key:=Range("C1:C" & lstRow) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveSheet.Sort.SortFields.Add Key:=Range("B1:B" & lstRow) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveSheet.Sort
.SetRange Range("A1:C" & lstRow)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Set rng = ActiveSheet.Range("D1")
rng.Formula = "=CONCATENATE(A1,""-"",B1,""-"",C1)"
rng.AutoFill ActiveSheet.Range("D1:D" & lstRow)
'now you can copy sorted data whatever you want ;)
Set rng = Nothing
End Sub
注意:在使用上面的宏之前,请确保数据存在于单个列中:A - 在这种情况下。
干杯,Maciej