如何使用动态数量的排序键进行排序?

时间:2019-05-30 22:16:34

标签: excel vba

我需要使用多列作为键对VBA中的数据进行排序,但提前知道列数。

我尝试使用sheets.sort方法并在for循环中使用.sortfields.add,但这并没有任何效果。

以下是用于对数据进行排序的代码:

For sh = 1 To 2
        Sheets(sh).Sort.SortFields.Clear
        For i = 1 To idSize
            Sheets(sh).Sort.SortFields.Add Key:=Sheets(sh).UsedRange.Columns(idList(sh)(i)) _
                , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        Next i
        With Sheets(sh).Sort
         .Header = xlYes
         .MatchCase = False
         .Orientation = xlTopToBottom
         .Apply
        End With
    Next sh

其中sh遍历工作簿中的工作表,而要用作键的每一列的数字索引位于idList中。例如,idList(2)(1)代表工作表2中应作为主排序键的列的索引。

此代码根本不会进行排序。

1 个答案:

答案 0 :(得分:0)

尝试类似这样的方法。这只是一个如何遍历工作表和列的示例,您可能想更改排序顺序的内部逻辑。

Dim intCols As Integer
Dim rng As Range
Dim sht As Worksheet

For Each sht In Sheets
    With sht

        Set rng = .Range("A1").CurrentRegion

        intCols = rng.Columns.Count

        .Sort.SortFields.Clear
        For i = 1 To intCols
            .Sort.SortFields.Add Key:=Columns(i), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        Next

        With .Sort
            .SetRange rng
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With

Next