VBA — сортировка нескольких диапазонов на одном листе по нескольким критериям

#excel #vba #excel-2016

#excel #vba #excel-2016

Вопрос:

У меня есть код, предназначенный для сортировки динамических диапазонов. Первый оператор ‘With’ сортируется правильно, со вторым у меня возникают проблемы. Я не уверен, как правильно определить диапазон, который я хочу отсортировать. С помощью первого оператора ‘With’ я точно знаю, с какой ячейки начинать сортировку, A7. Однако из-за динамического характера данных я не знаю точного номера строки, с которой начнется второй набор данных. Поэтому я пытаюсь указать диапазон, начинающийся со столбца A в строке financeTopRow, и выполнить сортировку в нижней части этих данных.Вот мой код:

 With mainSheet.Range("A7:N" amp; analyticsBottomRow)
.Cells.Sort Key1:=.Columns("A"), Order1:=xlDescending, _
            Key2:=.Columns("N"), Order2:=xlAscending, _
            Orientation:=xlTopToBottom, Header:=xlYes
End With

With mainSheet.Range(("A" amp; financeTopRow), "K")
.Cells.Sort Key1:=.Columns("A"), Order1:=xlDescending, _
            Key2:=.Columns("K"), Order2:=xlAscending, _
            Orientation:=xlTopToBottom, Header:=xlNo
End With
  

Комментарии:

1. FWIW вызов элемента без параметров .Cells является избыточным.

2. Похоже, вы хотите, чтобы этот второй был mainSheet.Range("A" amp; financeTopRow amp; ":K" amp; financeBottomRow) . Попробуйте перейти к этим диапазонам и нажать Ctrl T для форматирования в виде таблицы, затем используйте ListObject API, чтобы вам никогда не нужно было определять, что такое «первая строка» и «последняя строка».

3. У меня это сработало, спасибо