0

私はごく最近、VBAで書き始め、何年にもわたって他のさまざまな言語で書き始めました。私は現在、Excel VBAでフィルターを使用する際にいくつかの奇妙な問題を抱えており、私が経験している動作に誰かが光を当てることができるかどうか疑問に思いました。

一度に1つずつ、いくつかの異なる列でデータセットでフィルタリングしたいと思います。これを行うには、データセットを新しいシートにコピーし、そこでデータを並べ替えます。私が使用している最初のフィルターには:

Sheets("Temp Data").Range("A:T").ClearContents
Sheets("Main Sheet").Range("A1", "T" & CountLV_Rows).Copy Sheets("Temp Data").Range("A1", "T" & CountLV_Rows)
Sheets("Temp Data").Range("A1", "T" & CountLV_Rows).Sort Key1:=Range("R1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

これは正常に機能します。ここで、Col C INSTEADの値でフィルタリングしたいので、上記のコードを繰り返します(clearcontents成功の可能性を高めると思ったコマンドを含めて、Key1値を次のように交換します。C1

2番目(うまくいけば新しいフィルター)には、次のものを使用しました:

 `Sheets("Temp Data").Range("A:T").ClearContents
Sheets("Main Sheet").Range("A1", "T" & CountLV_Rows).Copy Sheets("Temp Data").Range("A1", "T" & CountLV_Rows)

'Sort the data so ascending site numbers in column C
Sheets("Temp Data").Range("A1", "T" & CountLV_Rows).Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal`

ただし、私のデータは、最初に列Rで並べ替えられた後、列Cで並べ替えられます。

以前に適用された種類をワイプするにはどうすればよいですか?

ご協力いただきありがとうございます

4

1 に答える 1

0

ワークシートと範囲を修飾していない、つまり、それらがどのワークブックまたはワークシートにあるかを明示的に指定していないという事実に関係している可能性があると思います。これは、常にやりたいことです。

以下でそれを行いましたが、Excel 2010 で動作します。

Sub test()
Dim CountLV_Rows As Long
Dim wbActive As Excel.Workbook

Set wbActive = ActiveWorkbook
With wbActive
    .Sheets("Temp Data").Range("A:T").ClearContents
    CountLV_Rows = .Sheets("Main Sheet").Range("A" & Rows.Count).End(xlUp).Row
    .Sheets("Main Sheet").Range("A1", "T" & CountLV_Rows).Copy _
            Destination:=.Sheets("Temp Data").Range("A1", "T" & CountLV_Rows)
    With .Sheets("Temp Data")
        .Range("A1", "T" & CountLV_Rows).Sort Key1:=.Range("R1"), Order1:=xlAscending, Header:=xlGuess, _
                                              OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                                              DataOption1:=xlSortNormal
    .Activate
    MsgBox "Sorted by R"
        .Range("A1", "T" & CountLV_Rows).Sort Key1:=.Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
                                              OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                                              DataOption1:=xlSortNormal
    End With
End With
End Sub
于 2012-12-10T15:52:15.083 に答える