自定义按数字排序和“ - ”

时间:2015-02-15 20:01:02

标签: vba excel-vba excel

我一直试图对一系列细胞进行排序,但似乎无法得到我想要的结果。单元格范围包含如下值:
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“),但无法得到正确的结果。是否有可能获得我想要的排序结果或者是否需要宏?非常感谢任何帮助。

1 个答案:

答案 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