字符串出现后的Excel排序列表

时间:2015-04-15 18:32:04

标签: string excel sorting

我在Excel 2013中有一张包含以下行的工作表:

A113F01
A234D01
A233F01
A413G02
A412C01
A413D01
A114G01
A116D02
A333F02
A342G01
A233F03
A233G04

有没有办法对这些行进行排序,首先是在每行中4个第一个字符的出现次数之后,然后按升序排列,以便列表如下所示:

A113D01
A113F01
A233F03
A233G04
A413D01
A413G02
A114G01
A116D02
etc....

1 个答案:

答案 0 :(得分:0)

这将是一个两步过程,您可以将公式放入右侧未使用的列中,以计算A列中前四个字符的频率,例如,

=COUNTIF(A:A, LEFT(A2, 4)&CHAR(42))

放入辅助列中的第二行,并填写A列数据的底部。

然后,您将使用此新帮助程序列作为降序排序的主排序键,将列A作为辅助排序键按升序排序。排序后,根据需要保留或删除辅助列中的数据。

如果您选择使用基于VBA的解决方案,这将是一个很好的起点。

Sub sort_by_first_four()
    With ActiveSheet
        With .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp))
            With .Offset(1, 1).Resize(.Rows.Count - 1, 1)
                .Formula = "=COUNTIF(A:A, LEFT(A2, 4)&CHAR(42))"
                .Value = .Value
            End With
            With .Resize(.Rows.Count, 2)
                .Cells.Sort Key1:=.Columns(2), Order1:=xlDescending, _
                            Key2:=.Columns(1), Order2:=xlAscending, _
                            Orientation:=xlTopToBottom, Header:=xlYes
            End With
            With .Offset(1, 1).Resize(.Rows.Count - 1, 1)
                .ClearContents
            End With
        End With
    End With
End Sub

您提供的示例数据通常都有一个列标题,我就是这样编写的。我还假设数据在A列中,B列中没有任何内容。

Multiple Sort with Helper column