Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting vba excel对包含字符串的升序数字排序范围_Sorting_Excel_Range_Vba - Fatal编程技术网

Sorting vba excel对包含字符串的升序数字排序范围

Sorting vba excel对包含字符串的升序数字排序范围,sorting,excel,range,vba,Sorting,Excel,Range,Vba,我有一个包含以下字符串的范围: 步骤1、步骤10、步骤3、步骤2 使用以下代码 input_sh.Activate With ActiveSheet .Range("H2:H20").Select .Sort.SortFields.Clear .Sort.SortFields.Add Key:=Range("H2"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAs

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

步骤1、步骤10、步骤3、步骤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
步骤10、步骤1、步骤2、步骤3

但是我想


步骤1、步骤2、步骤3、步骤10

我将使用mid函数将数字分隔为另一列,即最后的+1,并对其进行排序

编辑:我不在电脑前,但我想你唯一的方法是设置一个宏:

按前9个参数筛选工作表。 在第2行之前剪切并插入它们。 自己分类。 然后卸下过滤器,按照上面的步骤对其余部分进行排序。
字符串后面有下划线和数字。若这将成为字符串的格式,那个么您可以简单地使用u作为分隔符,使用convert text to columns拆分字符串。稍后,您可以排序和连接以获得已排序的字符串列表

 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

谢谢大家的贡献。 对于用户,我在阅读您的建议之前找到了解决方案。无论如何,谢谢你的努力

我的解决方案:

为_拆分str 在文件名旁边写第二个索引,然后按第二列排序,只需编号 用数字清除列
您需要编写一个自定义排序算法。这取决于您希望它的通用性-您是否有充分的理由不能简单地将字符串值更改为步骤_01等。我已尝试按照您的建议更改字符串,但我得到了相同的结果。字符串是从特定目录提取的文件名,因此我无法修改它们。对于glh,我考虑过这样做,但我希望我不必归结到这一点。您是否能够覆盖这些值,或者它们是此格式所必需的?它们是文件夹中的文件名。他们必须是那种形式,因为我怀疑需要什么;