Сортировка с помощью VBA - многоуровневая сортировка - PullRequest
0 голосов
/ 26 мая 2020

У меня есть настраиваемый список (есть только один настраиваемый список) для сортировки в Excel. Сначала я сортирую по: Столбец A (дата) по возрастанию Столбец H (буквы «H», «A», «B») столбец настраиваемого списка G (дата) по убыванию

Но получите неверный результат

введите описание изображения здесь

Sub Sort()
Dim LRow As Long

    Application.AddCustomList ListArray:=Array("H", "A", "B")

    With Sheets("Basis")
    LRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    .Names.Add Name:="Daten", RefersTo:=.Range("A1:H" & LRow)
    .Sort.SortFields.Clear
    .Range("Daten").Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes
    .Range("Daten").Sort key1:=.Range("H1"), order1:=xlDescending, ordercustom:=Application. _
     CustomListCount + 1, Header:=xlYes
    .Range("Daten").Sort key1:=.Range("G1"), order1:=xlDescending, Header:=xlYes
     End With

    Application.DeleteCustomList Application.CustomListCount

End Sub

Правильная сортировка: введите описание изображения здесь

1 Ответ

1 голос
/ 27 мая 2020

попробуйте,

Sub test()
    Dim LRow As Long
    Dim rngDB As Range
    Dim v As Integer
    Dim Ws As Worksheet

    Application.AddCustomList ListArray:=Array("H", "A", "B")
    v = Application.CustomListCount

    Set Ws = ActiveWorkbook.Worksheets("Basis")

    With Ws
        LRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        Set rngDB = .Range("a1", .Range("h" & LRow))
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range("A1"), Order:=xlAscending
        .Sort.SortFields.Add Key:=.Range("h1"), Order:=xlDescending, CustomOrder:=v
        .Sort.SortFields.Add Key:=.Range("g1"), Order:=xlDescending
        With .Sort
            .SetRange rngDB
            .Header = xlYes
            .Orientation = xlTopToBottom
            .Apply
        End With
    End With
    Application.DeleteCustomList v
End Sub

Preview

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