按vba excel包含字符串的升序数字顺序排序范围

时间:2013-02-27 11:21:58

标签: sorting excel-vba range vba excel

我有一个包含以下字符串的范围:

step_1,step_10,step_3,step_2

使用以下代码

input_sh.Activate
With ActiveSheet
    .Range("H2:H20").Select
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=Range("H2"), _
       SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers 'xlSortNormal
With .Sort
        .SetRange Range("H2:H20")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
End With

step_10,step_1,step_2,step_3

但我想得到

step_1,step_2,step_3,step_10

3 个答案:

答案 0 :(得分:0)

我会将数字分成另一列,你的最后一个+ 1,使用mid函数并对其进行排序。


编辑:我不在我的电脑上,但我认为你这样做的唯一方法是设置一个宏:

  1. 按照前9个过滤工作表。
  2. 在第2行之前剪切并插入它们。
  3. 自行排序。
  4. 然后移除过滤器并按上图对其余部分进行排序。

答案 1 :(得分:0)

你的字符串有下划线后跟数字。如果这将是您的字符串的格式,您可以使用转换文本将字符串拆分为使用“_”作为分隔符的列。稍后您可以排序和连接以获取排序的字符串列表。

enter image description here

 Sub Sample()


        Columns(1).Copy Columns(3)

        Columns("C:C").Select
        Selection.TextToColumns Destination:=Range("C1"), DataType:=xlDelimited, _
                                TextQualifier:=xlDoubleQuote, Other:=True, OtherChar:="_", FieldInfo:=Array(Array(1, 1), Array(2, 1))

        Columns("D:D").Sort Range("D1")

        i = 1
        Do While Not IsEmpty(Range("C" & i))
            Range("B" & i) = Range("C" & i) & "_" & Range("D" & i)
            i = i + 1
        Loop

    End Sub

答案 2 :(得分:0)

谢谢你的每一个贡献。 在阅读您的建议之前,我找到了我的解决方案。无论如何,谢谢你的努力

我的解决方案:

  • 拆分str为“_”
  • 写下文件名旁边的第二个索引,然后是第二个col,然后是col,只有数字
  • 用数字清理col