Как я могу отсортировать только строки с данными? - PullRequest
2 голосов
/ 30 ноября 2011

У меня есть макрос, который сортирует строки по определенному столбцу, проблема в том, что я вручную устанавливаю диапазон для количества сортируемых строк (т.е. A2: A174) каждый раз, когда добавляю новую строку. Как я могу изменить свой код так, чтобы он сортировал все строки только с данными, чтобы мне не приходилось углубляться в код и изменять диапазон каждый раз, когда я добавляю новую строку.

Sub SortByName()

  SortByName Macro

    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A174") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:H174")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A1").Select
End Sub
Sub SortByDate()

Большое спасибо заранее за вашу мудрость!

1 Ответ

3 голосов
/ 30 ноября 2011

что-то вроде этого, которое ищет последнюю ячейку в A, чтобы отметить диапазон.

Sub SortByName()
    Dim ws As Worksheet
    Dim rng1 As Range
    Set ws = Sheets("Sheet1")
    Set rng1 = ws.Range(ws.[a1], Cells(Rows.Count, "A").End(xlUp))
    ws.Sort.SortFields.Clear
    ws.Sort.SortFields.Add Key:=rng1 _
                                , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange rng1.Resize(rng1.Rows.Count, 8)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Application.Goto ws.[a1]
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...