Excel VBA: Может кто-нибудь помочь мне понять, как использовать порядок сортировки Cusom? - PullRequest
0 голосов
/ 27 августа 2018

Я работал над кодом для сортировки блока данных, используя Range.Sort, используя пользовательский порядок сортировки. Я пытался записывать макросы и смотреть в Интернете, но пришел в замешательство по поводу этой проблемы.

  1. Для аргумента key1:=; это одна ячейка (например, Range("A1")) или целый столбец?
  2. Как именно я могу использовать пользовательский порядок сортировки в OrderCustom:=?
  3. В случае, если я пойду об этом все неправильно; Range в Range.Sort может быть где угодно, пока он находится в одном непрерывном блоке, правильно?

Вот код, с которым я работаю:

Sub Test()
    Dim quantity As Variant
        quantity = 2 + WorkshetFunction.Count(Range("A" & 3, "K" & 900))

    With Range("A" & 3, "K" & quantity)
        .Sort key1:=Range("A" & 3) 
              Order:=xlAscending
              Header:=xlNo
              OrderCustom:="VALID, GOOD, DUE, OVERDUE, WAY OVERDUE, MISSING" 
                '> This is the order in which I want the items on this list sorted by.
    End With
End Sub

Range("A" & 3, "K" & quantity) относится к блоку данных, содержащему в "A" «состояние» некоторых элементов, определяемое датами окончания их калибровки, среди прочих данных, которые не имеют отношения к этой цели, и я не на свободе делиться. Все, что я прошу, это помочь понять внутреннюю работу метода .Sort. Спасибо!

1 Ответ

0 голосов
/ 27 августа 2018

Give'r

Sub SortItOut()
    Dim rng As Range, sh As Worksheet
    Set sh = Sheets("Sheet1")
    With sh
        Set rng = .Range("A3:K" & .Cells(.Rows.Count, "K").End(xlUp).Row)
        With rng
            sh.Sort.SortFields.Clear
            sh.Sort.SortFields.Add Key:=Range("A3") _
                                 , SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
                                   "VALID,GOOD,DUE,OVERDUE,WAY OVERDUE,MISSING", DataOption:=xlSortNormal
        End With
        With .Sort
            .SetRange rng
            .Orientation = xlTopToBottom
            .Apply
        End With
    End With

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