0

vba (より大きなマクロの途中) でテーブルを 2 つのレベルで並べ替えようとしています。マクロを記録しようとしましたが、その範囲はその一連のデータに固有のものでした。範囲の終わりは変わる可能性があるので、コードにカウンターを追加して、基本的に範囲の終わりを教えてくれました

以下にあるのは、コードの簡略化されたバージョンです (単純化するためにカウンターを 200 に設定していますが、これは私のコードで変更されます)。

私が望むのは、範囲 ("A1、"AB" & counterT) を列 C で並べ替え、次に列 A で並べ替えることです。そのため、これを行う簡単な方法 (あると思います) がある場合は、コードを無視してかまいません。

実際に問題を引き起こしている部分を強調するために、コードを一時停止しました (以下でわかるように)。ただし、コードがまだ機能するという部分を修正するかどうかは完全にはわかりません。そのため、それは現在の問題であり、問​​題全体ではない可能性があります。助けてくれてありがとう!

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)

ここでコードを一時停止しています。ここに第 2 レベル (列 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
4

2 に答える 2

0

並べ替えについてはよくわかりませんが、カウントするには、次を試してください。

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

また、最初の並べ替え条件を定義するときに、Range ステートメントに " が 3 つあるようです。

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
于 2013-06-12T12:54:32.317 に答える
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
于 2013-06-13T13:32:01.220 に答える