在vba中按升序排序,最后一行可变

时间:2018-10-04 11:33:16

标签: excel vba excel-vba

我很难分析代码中的问题。我需要按升序对ColumnE进行排序,但问题是排序中不应该包括的行也已排序。

enter image description here

黄色突出显示的颜色不应包含在排序过程中。我需要在第3行开始排序。

这是我的代码:

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

谁能告诉我我的代码有什么问题?感谢您的帮助。

谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

要解决此问题,请使用Range("C1:E" & lastRow5).Sort key1:=Range("E2"), order1:=xlAscending, Header:=xlYes,它将ActiveSheet第五列的lastRow与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