Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Excel 宏对数据进行排序,直到空行,然后重复_Excel_Vba_Sorting_Macros - Fatal编程技术网

Excel 宏对数据进行排序,直到空行,然后重复

Excel 宏对数据进行排序,直到空行,然后重复,excel,vba,sorting,macros,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"

在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
根据评论更新:

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:I,I:I为主键。

在引用工作表上的单元格时,请尽量避免使用“”方法。通过变量跟踪位置并使用这些变量直接引用是首选方法

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
Sub playersort()
暗淡的i和长的一样,rw和长的一样
rw=1
有工作表(“球员分数”)
当rw<.Cells(Rows.Count,“A”).结束(xlUp).行时执行
带.Cells(rw,6).CurrentRegion
使用.Resize(.Rows.Count,2)
.Cells.Sort Key1:=.Columns(2),Order1:=xlDescending_
键2:=.列(1),顺序2:=xl升序_
方向:=xltoptobttom,标题:=xlYes'在引用工作表上的单元格时,请尝试避免使用“”方法。通过变量跟踪位置并使用这些变量直接引用是首选方法

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
Sub playersort()
暗淡的i和长的一样,rw和长的一样
rw=1
有工作表(“球员分数”)
当rw<.Cells(Rows.Count,“A”).结束(xlUp).行时执行
带.Cells(rw,6).CurrentRegion
使用.Resize(.Rows.Count,2)
.Cells.Sort Key1:=.Columns(2),Order1:=xlDescending_
键2:=.列(1),顺序2:=xl升序_

方向:=xlTopToBottom,标题:=xlYes'我已经让这段代码为第一组数据工作,但不知道如何循环下一组数据,即跳过空白单元格并重新开始。。。Dim N只要N=单元格(1,1).结束(xlDown).行范围(“A1:B”&N).排序键1:=范围(“B1:B”&N),顺序1:=xlDescending,Header:=xlGuess我已经为第一组数据编写了此代码,但不知道如何循环下一组数据,即跳过空白单元格并重新开始。。。Dim N,只要N=单元格(1,1).结束(xlDown).行范围(“A1:B”&N).排序键1:=范围(“B1:B”&N),顺序1:=xlDescending,标题:=xlGuessing这是mega,非常感谢。还有一个问题——如果我在D列和E列中也有球员的名字和分数会怎么样。上面的代码可以被修改,这样它就可以根据B对A:B进行排序(它已经这样做了),也可以根据E对D:E进行排序吗?C:C中有什么(如果有的话)?什么都没有,我已经将它们转换了,所以不是D:E,而是C:D相对于DOK,我正式感到困惑。您要先对A:B进行排序。那么C:D还是D:E?对不起!对B中的条目进行A:B排序(它已经这样做了),然后用同样的方式对D进行C:D排序。这是mega,非常感谢。还有一个问题——如果我在D列和E列中也有球员的名字和分数会怎么样。上面的代码可以被修改,这样它就可以根据B对A:B进行排序(它已经这样做了),也可以根据E对D:E进行排序吗?C:C中有什么(如果有的话)?什么都没有,我已经将它们转换了,所以不是D:E,而是C:D相对于DOK,我正式感到困惑。您要先对A:B进行排序。那么C:D还是D:E?对不起!对B中的条目进行A:B排序(它已经这样做了),然后以相同的方式对C:D进行D排序