excel vba:有人可以帮助我了解如何使用cusom排序顺序吗?

时间:2018-08-27 15:02:46

标签: excel vba excel-vba sorting

我一直在研究使用自定义排序顺序使用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 :(得分:0)

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