Как отсортировать лист Excel по двум различным столбцам - PullRequest
0 голосов
/ 23 мая 2018

Давайте предположим, что диаграмма с значениями только в первых двух столбцах A и B выглядит следующим образом

enter image description here

Сначала я бы хотел отсортировать диаграммув алфавитном порядке по столбцу A, то есть Xs вверху, затем Ys и Zs.

2-й ход должен быть сортировкой столбца B с учетом столбца A, то есть сохранить блок X и отсортировать их числа в столбце B. То же самое с блоками Y и Z.

1-й шаг отлично работает со следующим кодом:

Sub sort()
Dim SortClmn As String
Dim Area As String
Area= "A1:B10"
SortClmn = "A"
ActiveSheet.Range(Area).Sort _
Key1:=Range(SortClmn & "1"), Order1:=xlDescending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub

Как мне нужно изменить этот код, чтобы применить 2-й шаг?

Заранее спасибо

Ответы [ 4 ]

0 голосов
/ 23 мая 2018

Хотя я (как и @Vityata) думал, что вы можете просто записать макрос и соответствующим образом отредактировать код .... Я приведу вам прямой пример:

Activesheet.Range("A:B").Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1"), Order2:=xlAscending, Header:=xlNo, MatchCase:=False, Orientation:=xlTopToBottom
0 голосов
/ 23 мая 2018

Самый простой способ - это отсортировать столбец B, а затем отсортировать столбец A, это даст желаемый эффект.Используйте тот же метод, который вы использовали, но отсортируйте первый столбец b, а затем столбец a.

Если я изменю ваш код, он будет выглядеть следующим образом

Sub sort()
Dim SortClmn As String
Dim Area As String
Area = "A1:B10"
SortClmn = "B"
ActiveSheet.Range(Area).sort _
Key1:=Range(SortClmn & "1"), Order1:=xlAscending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
Area = "A1:B10"
SortClmn = "A"
ActiveSheet.Range(Area).sort _
Key1:=Range(SortClmn & "1"), Order1:=xlAscending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub
0 голосов
/ 23 мая 2018
Sub sort()
    lastRow = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
    With ActiveWorkbook.ActiveSheet.sort
     .SortFields.Clear
     .SortFields.Add Key:=Range("A1:A" & lastRow), Order:=xlAscending
     .SortFields.Add Key:=Range("B1:B" & lastRow), Order:=xlAscending
     .SetRange Range("A2:B" & lastRow)
     .Header = xlNo
     .Apply
    End With
End Sub

Как то так?

0 голосов
/ 23 мая 2018
  1. Запись макроса;
  2. Выбор таблицы;
  3. На ленте - Данные> Сортировать;

enter image description here

Выберите первый столбец, который вы хотите отсортировать; Нажмите Добавить уровень ; Выберите второй столбец, который вы хотите отсортировать; См. Сгенерированный код ;; Рефакторинг, избегая Select, Activate и помещая строковые переменные;

Range.Sort Method MSDN

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