Сортировать по возрастанию в vba с переменной последней строкой - PullRequest
0 голосов
/ 04 октября 2018

Мне трудно анализировать проблему в моем коде.Мне нужно отсортировать 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 голосов
/ 04 октября 2018

Заголовок в примере состоит из двух строк.И Header:=xlYes ожидает, что только первая строка будет заголовком, поэтому вторая строка берется как часть значений для сортировки.

Чтобы исправить это, используйте Range("C1:E" & lastRow5).Sort key1:=Range("E2"), order1:=xlAscending, Header:=xlYes, который принимает lastRow изпятый столбец 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
0 голосов
/ 04 октября 2018

Ваш выбор содержит 2 строки заголовка.Вы можете объединить эти заголовки или установить диапазон в вашем коде, как показано ниже (при необходимости измените 9999):

    'sort by ascending order
    wsRD.Range("C2:E9999").Sort key1:=wsRD.Range("E2"), _
    order1:=xlAscending, Header:=xlYes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...