宏将数据排序到空白行,然后重复

时间:2016-03-04 12:07:59

标签: excel vba sorting macros

在A栏中我有一个球员名单,在B栏我有他们的分数。有不同数量的玩家接着是未设置的空白行数,其次是另一个玩家列表。

我需要一个vba中的宏,它将根据玩家的得分(B列)按降序对A列和B列进行排序,但只能直到它击中空白行。然后一旦它击中空白行,它将跳转到下一组玩家并以相同的方式对它们进行排序,继续循环直到所有数据都被排序。

评论代码:

Dim N As Long
N = Cells(1, 1).End(xlDown).Row
Range("A1:B" & N).Sort Key1:=Range("B1:B" & N), Order1:=xlDescending, Header:=xlGuess

评论更新:

应对每个组执行两个连续排序。 F:G与G:G是主键然后H:我和我:我是主键。

1 个答案:

答案 0 :(得分:0)

在引用工作表上的单元格时,尽量避免使用Range .Select¹方法。通过变量跟踪位置并使用它们进行直接参考是首选方法。

Sub playersort()
    Dim i As Long, rw As Long
    rw = 1
    With Worksheets("Players_Scores")
        Do While rw < .Cells(Rows.Count, "A").End(xlUp).Row
            With .Cells(rw, 6).CurrentRegion
                With .Resize(.Rows.Count, 2)
                    .Cells.Sort Key1:=.Columns(2), Order1:=xlDescending, _
                                Key2:=.Columns(1), Order2:=xlAscending, _
                                Orientation:=xlTopToBottom, Header:=xlYes   '<~~ you should know if you have a header or not!
                End With
                With .Resize(.Rows.Count, 2).Offset(0, 2)
                    .Cells.Sort Key1:=.Columns(2), Order1:=xlDescending, _
                                Key2:=.Columns(1), Order2:=xlAscending, _
                                Orientation:=xlTopToBottom, Header:=xlYes   '<~~ you should know if you have a header or not!
                End With
            End With
            For i = 1 To 2
                rw = .Cells(rw, 1).End(xlDown).Row
            Next i
        Loop
    End With
End Sub

通过更新 rw var,向下移动两次以跳过空白行是一件简单的事情。

您真的应该知道您的数据是否有列标题标签行。 xlGuess 可能在大多数情况下适用于录制的代码,但它根本不可靠。

¹有关远离依赖选择和激活以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros