我一直在尝试对一系列单元格进行排序,但似乎无法得到我想要的结果。单元格范围包含的值如下:
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“),但是没有得到正确的结果。有没有可能得到我想要的排序结果,或者是否需要一个宏?任何帮助都将不胜感激。
发布于 2015-02-16 05:08:53
按"-“将文本拆分为多个列。
按列排序: 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
https://stackoverflow.com/questions/28530501
复制相似问题