使用计数器确定范围,按两级列排序

时间:2013-06-12 09:43:03

标签: excel vba

我正在尝试按两个级别对vba中的表(在较大的宏的中间)进行排序。我尝试按照我想要的方式录制宏,但是该范围特定于该系列数据。范围的结束可以改变,所以我在代码中添加了一个计数器,基本上告诉我范围结束的位置

我下面的内容是我的代码的简化版本(我将计数器设置为200以简化操作,但这会在我的代码中发生变化)

我想要的是按列C(然后是列A)对范围(“A1”,“AB”和“计数器T”)进行排序,这样如果有更简单的方法(我假设有),请随意忽略我的代码。

我暂停了我的代码(正如您将在下面注意到的)突出显示真正给我带来麻烦的部分。但是我不完全确定我是否修复了代码仍然有效的部分,这可能只是当前的问题,而不是整个问题。 谢谢你的帮助!

Sub Sort

Dim counterT As Long
counterT = 200

Dim rDataToSort As Range, rSortData As Range

Set rSortData = Range("C4", C" & CounterT)

Set rDataToSort = Range("A4", AB" & CounterT)

我暂停了这里的代码,因为我不知道如何在这里添加第二级(A列)

With ActiveWorkbook.Worksheets("Output").Sort

.SortFields.Clear
.SortFields.Add Key:=rSortData, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange rDataToSort
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply

End With

2 个答案:

答案 0 :(得分:0)

我对排序不太确定,但为了计算,请尝试:

Counter = WorksheetFunction.Count(Range("A:A"))

此外,在定义第一个排序条件时,您似乎在Range语句中有三个“

Range("C2: ("C" & counter))

最后,您可以尝试循环排序条件:

Dim rangeID As Variant
with ActiveWorkbook.Worksheets("Sheet4").Sort
    .SortFields.Clear
    For Each rangeID In Array("C2: (C" & counter), "A2:A1512")
        .SortFields.Add Key:- .Range(rangeID), SortOn........
    Next
.setrange range("A:C")
.header = xlYes
end with

答案 1 :(得分:0)

知道了...它比我想象的容易得多哈哈这是除了必须假设“计数器已经定义并设置

的代码
Workbooks("ChainRetailerMacro.xlsm").Worksheets("sheet4").Range("A1", "U" & counter).Sort _
key1:=Sheets("sheet4").Range("A1", "A" & counter), order1:=xlAscending, _
key2:=Sheets("sheet4").Range("C1", "C" & counter), order2:=xlAscending, _
Header:=xlYes
End Sub