web-dev-qa-db-ja.com

VBAでのExcelのフィルタリングとコピー

Accessから日付の範囲を取得し、データをフィルター処理して、フィルター処理されたデータに基づいてグラフを作成するVBAスクリプトに取り組んでいます。フィルタリングされたデータは、グラフがからデータを取得する別のシートに送られます。 SQLステートメントを使用してAccessからデータを取得できますが、Excelのオートフィルターでエラーが発生します。これが私が持っているものです...

    Sheet3.Range("F4:F500").AutoFilter(, "Riveter 01").Copy Destination:=Sheet2.Range("A5")

アプリ定義またはオブジェクト定義のエラーが発生し、その理由がわかりません。これは適切な方法ですか、それとももっと簡単な方法がありますか?

ありがとう!

PS:このフィルターは22の固有のマシンで発生するため、マシンごとにループを実行することを計画していました。それが最速または適切な方法ではない場合は、私に知らせてください。

6
Grant

これを2つの部分に分割する必要があります。フィルタリングしてからコピー/貼り付けします。下記参照:

With Sheet3
    .AutoFilterMode = False
    With .Range("F4:F500")
        .AutoFilter Field:=1, Criteria1:="Riveter 01"
        .SpecialCells(xlCellTypeVisible).Copy Destination:=Sheet2.Range("A5")
    End With
End With

フィルタを削除するには:

On Error Resume Next
    Sheet3.ShowAllData
On Error GoTo 0

エラー時再開次は、エラーをスキップするためのフィルターが存在しない場合です。一般的な解決策を探している人は、Sheet3とSheet2を使用することに注意してください。

14
InContext

私はあなたが2つの別々のステップでこれをしなければならないと思います:

  1. データをフィルタリングする
  2. フィルタリングされたデータを別のシートにコピーする

ここでの答えは、これを行う方法の優れた例です。 マクロをオートフィルターし、表示されているデータのみをコピーして、次に使用可能な行に貼り付けます

0
PaulStock