Добавление в расширенный выбор функции для сортировки списка в макросе VBA - PullRequest
0 голосов
/ 11 ноября 2019

Я на последнем этапе настройки этого простого макроса, но просто не могу понять одну часть. Так на этом изображении:

enter image description here

Когда макрос выполняется, данные сортируются успешно, но сортируется только этот столбец, что означает, что порядок значений вдругие столбцы не меняются, что приводит к путанице в данных.

Если бы я делал это вручную, то Excel попросил бы меня спросить, хочу ли я расширить свой выбор, и я бы сказал да. Любые советы по добавлению в эту функциональность будут удивительными.

Спасибо! PS Я знаю, что этот подход немного прост

Sub SortData()

If Range("E17").Value = 1 Then
    Range("E18:E950").Sort Key1:=Range("E18"), Order1:=xlDescending

ElseIf Range("F17").Value = 1 Then
    Range("F18:F950").Sort Key1:=Range("F18"), Order1:=xlDescending

ElseIf Range("G17").Value = 1 Then
    Range("G18:G950").Sort Key1:=Range("G18"), Order1:=xlDescending

ElseIf Range("H17").Value = 1 Then
    Range("H18:H950").Sort Key1:=Range("H18"), Order1:=xlDescending

ElseIf Range("I17").Value = 1 Then
    Range("I18:I950").Sort Key1:=Range("I18"), Order1:=xlDescending

ElseIf Range("J17").Value = 1 Then
    Range("J18:J950").Sort Key1:=Range("J18"), Order1:=xlDescending

Else
    Range("K18:K950").Sort Key1:=Range("K18"), Order1:=xlDescending

End If

End Sub

1 Ответ

0 голосов
/ 11 ноября 2019

Вам просто нужно включить весь диапазон в аргумент сортировки, так как это диапазон, который должен быть отсортирован. Ключ - это то, что определяет столбец для сортировки. Поэтому диапазон должен быть «E18: K950». Таким образом, у вас будет следующее:

Sub SortData()

If Range("E17").Value = 1 Then
    Range("A18:K950").Sort Key1:=Range("E18"), Order1:=xlDescending

ElseIf Range("F17").Value = 1 Then
    Range("A18:K950").Sort Key1:=Range("F18"), Order1:=xlDescending

ElseIf Range("G17").Value = 1 Then
    Range("A18:K950").Sort Key1:=Range("G18"), Order1:=xlDescending

ElseIf Range("H17").Value = 1 Then
    Range("A18:K950").Sort Key1:=Range("H18"), Order1:=xlDescending

ElseIf Range("I17").Value = 1 Then
    Range("A18:K950").Sort Key1:=Range("I18"), Order1:=xlDescending

ElseIf Range("J17").Value = 1 Then
    Range("A18:K950").Sort Key1:=Range("J18"), Order1:=xlDescending

Else
    Range("A18:K950").Sort Key1:=Range("K18"), Order1:=xlDescending

End If

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