我在Excel 2013中有一张包含以下行的工作表:
A113F01
A234D01
A233F01
A413G02
A412C01
A413D01
A114G01
A116D02
A333F02
A342G01
A233F03
A233G04
有没有办法对这些行进行排序,首先是在每行中4个第一个字符的出现次数之后,然后按升序排列,以便列表如下所示:
A113D01
A113F01
A233F03
A233G04
A413D01
A413G02
A114G01
A116D02
etc....
答案 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列中没有任何内容。