Страницы: 1
RSS
Сортировка отдельных диапазонов, разделенных пустой ячейкой
 
Добрый день, хотел поинтересоваться возможна ли автоматическая сортировка каждого отдельного диапазона. Каждый диапазон отделен пустой ячейкой (в примере: I22 и I39 при предварительно отфильтрованных данных). Сортируются данные по столбцу I.

Вручную выделяется диапазон I10:A15 и выставляется сортировка от минимального к максимальному, далее повторяется с диапазоном I25:A32. Однако количество диапазонов большое и вручную тяжеловато.
Изменено: alexey loginov - 01.06.2021 13:00:54
 
alexey loginov, добрый день, для конкретного примера, убрать фильтры, для листа исх.
Код
Sub mrshkei()
Dim i As Long, lr As Long
Application.ScreenUpdating = False
lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lr
    x1 = Application.WorksheetFunction.CountIf(Range(Cells(i, 1), Cells(i, 8)), "<>" & "")
    x2 = Application.WorksheetFunction.CountIf(Range(Cells(i - 1, 1), Cells(i - 1, 8)), "<>" & "")
    x3 = Application.WorksheetFunction.CountIf(Range(Cells(i + 1, 1), Cells(i + 1, 8)), "<>" & "")
    x4 = Cells(i, 9)
If x1 > 0 And x2 = 0 And x3 <> 0 And x4 <> "" Then
    Range(Cells(i, 1), Cells(Cells(i, 1).End(xlDown).Row, 9)).Select
    ActiveWorkbook.Worksheets("Исх.").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Исх.").Sort.SortFields.Add Key:=Range(Cells(i, 9), Cells(Cells(i, 1).End(xlDown).Row, 9)), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Исх.").Sort
        .SetRange Range(Cells(i, 1), Cells(Cells(i, 1).End(xlDown).Row, 9))
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End If
Next i
Application.ScreenUpdating = True
Range("A1").Select
End Sub


Изменено: Mershik - 01.06.2021 15:35:06
Не бойтесь совершенства. Вам его не достичь.
 
Добрый день!
Возможна с помощью макроса.
 
Как написал Mershik,
Цитата
убрать фильтры, для листа исх.
Код
Sub SortRng()
Dim rng As Range
Dim iLastRow As Long
 iLastRow = Cells(Rows.Count, "I").End(xlUp).Row
  For Each rng In Range("I7:I" & iLastRow).SpecialCells(2, 1).Areas
    If rng.Count > 1 Then
     Range(rng.Cells(1, -7), rng.Cells(rng.Count)).Sort key1:=rng.Cells(1), Order1:=xlAscending
    End If
  Next
End Sub
 
Mershik, благодарю Вас за помощь! Спасибо за макрос

Kuzmich, если Ваш макрос использовать выдаётся ошибка 1004. Для этого требуется, что ячейки имели одинаковый размер.
Изменено: alexey loginov - 01.06.2021 16:03:16
 
alexey loginov, написал
Цитата
выдаётся ошибка 1004
Где-то после 7-ой строки у вас есть объединенные ячейки.
В вашем приведенном примере макрос работает
Страницы: 1
Наверх