Сортировка из динамического ряда - PullRequest
0 голосов
/ 19 декабря 2018

Я работаю над сортировкой двух разделов электронной таблицы, верхняя часть которой работает нормально, нижняя половина имеет проблемы, поскольку строка изменяется в зависимости от данных.Вот то, что у меня есть, проблема в том, что он заканчивает сортировку целых (обоих) разделов (которые разделены разрывом строки).Любая помощь в правильном направлении будет принята с благодарностью.

Правка для уточнения: у меня есть электронная таблица, состоящая из двух разделов.Верхний раздел, который может быть переменным / динамическим диапазоном.То есть это может быть 30 строк или 300 строк.Вторую половину таблицы, которая отделена вставкой строки (пустой ряд ячеек), мне нужно отсортировать, и у меня возникла проблема.Проблема заключается в том, что сортировка распознает ячейки от строки A (переменная / динамическая) до CU.Надеюсь, это поможет объяснить вещи немного лучше, но просто дайте мне знать, если понадобятся дополнительные разъяснения.

 Sub test()

 Dim lrow As Long

 lrow = Selection.End(xlDown).Row

Selection.End(xlDown).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("Inseason Columns").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Inseason Columns").Sort.SortFields.Add Key:=Range( _
    "E" & lrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("Inseason Columns").Sort
    .SetRange Range("A:CU", Selection.End(xlDown))
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

End Sub

1 Ответ

0 голосов
/ 19 декабря 2018

Если «разрывы строк» ​​представляют собой пустые строки, скройте их, и вы можете циклически проходить через Range.Areas of Range.SpecialCells (xlCellTypeVisible).

Option Explicit

Sub sortAreas()

    Dim a As Long

    With Worksheets("sheet10")

        .range("1:2").entirerow.hidden = true
        .Columns("E").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True

        With Intersect(.Range("A:CU"), .UsedRange).SpecialCells(xlCellTypeVisible)

            For a = 1 To .Areas.Count

                With .Areas(a)

                    .Cells.Sort Key1:=.Columns(5), Order1:=xlAscending, DataOption1:=xlSortTextAsNumbers, _
                                Orientation:=xlTopToBottom, Header:=xlNo

                End With
            Next a

        End With

        .Columns("E").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = False
        .range("1:2").entirerow.hidden = false

    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...