代码之家  ›  专栏  ›  技术社区  ›  Yoona May

在vba中使用变量最后一行按升序排序

  •  2
  • Yoona May  · 技术社区  · 7 年前

    我很难分析代码中的问题。我需要按升序对列进行排序,但问题是不应该包含在排序中的行也被排序了。

    enter image description here

    这是我的密码:

            'sort by ascending order
            wsRD.Columns("C:E").Sort key1:=wsRD.Range("E1"), _
            order1:=xlAscending, Header:=xlYes
    

    有人能告诉我我的代码有什么问题吗?谢谢你的帮助。

    非常感谢。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Vityata    7 年前

    示例中的头由两行组成。以及 Header:=xlYes 只期望第一行是标题,因此第二行作为要排序的值的一部分。

    要修复它,请使用 Range("C1:E" & lastRow5).Sort key1:=Range("E2"), order1:=xlAscending, Header:=xlYes ,它取 ActiveSheet lastRow(ActiveSheet.Name, 5) .

    整个解决方案:

    Sub TestMe()
    
        Dim lastRow5 As Long
        lastRow5 = lastRow(ActiveSheet.Name, 5)
        Range("C1:E" & lastRow5).Sort key1:=Range("E2"), order1:=xlAscending, Header:=xlYes
    
    End Sub
    
    Function lastRow(wsName As String, Optional columnToCheck As Long = 1) As Long
    
        Dim ws As Worksheet
        Set ws = Worksheets(wsName)
        lastRow = ws.Cells(ws.Rows.Count, columnToCheck).End(xlUp).Row
    
    End Function
    
        2
  •  2
  •   Matthijs Lasure    7 年前

    您的选择包含两个标题行。您可以合并这些标头,也可以按如下方式在代码中设置范围(根据需要更改9999):

        'sort by ascending order
        wsRD.Range("C2:E9999").Sort key1:=wsRD.Range("E2"), _
        order1:=xlAscending, Header:=xlYes
    
    推荐文章