macros来sorting数据,直到空白行,然后重复

在AI列有玩家名单的列表,在BI列中有他们的分数。 有不同数量的玩家跟着一排空白行,然后是另一个玩家列表。

我需要一个vba中的macros,它会根据玩家的得分(B列)以降序对列A和B进行sorting,但是只有在它到达空白行之前。 然后,一旦它到达空白行,它将跳转到下一组播放器,并以相同的方式对它们进行sorting,直到所有数据都被sorting为止。

代码来自评论:

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 

从评论更新:

应该对每个组进行两次连续的sorting。 F:G与G:G是主键然后H:I与I:我是主键。

尝试避免范围 。在工作表上引用单元格时select1方法。 通过variables跟踪位置并将其用于直接参考是首选方法。

 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大部分时间可以用于录制的代码,但它不可靠。


¹ 请参阅如何避免使用在Excel VBAmacros中select更多的方法来摆脱依靠select和激活来实现您的目标。