フィルター抽出中のデータをコピーする方法を解説します。
Copyメソッドには「非表示行をコピーしない」機能があるため、
可視セルを取得する必要はなく、純粋なCopyメソッドで実行可能です。
抽出中のフィルターエリア全体をコピーする
第1シートのフィルターデータ全体を第2シートのA1セルへコピーする場合は、
以下のコードを実行します。
Worksheets(1).AutoFilter.Range.Copy Worksheets(2).Range("A1")
冒頭の通り、Copyメソッドには非表示セルをコピーしない機能があるため、
単純にデータ全体をCopyするだけで「抽出中のデータのみをコピー」が実行できます。
SpecialCells(xlCellTypeVisible)などを用いて可視セルを扱う必要はありません。
フィルターが設置されている範囲をRangeオブジェクトで取得するには、
対象シート.AutoFilter.Range
この指定で一発で取得できますのでこちらも覚えておきましょう。
見出し部分を除いてコピーする
上記のコードを実行した場合は、
見出し行(フィルターの▼がついた行)もコピーされます。
データ部分だけをコピーしたい場合は、
以下のコードを実行してください。
Dim コピー元エリア As Range Set コピー元エリア = Worksheets(1).AutoFilter.Range Set コピー元エリア = コピー元エリア.Offset(1) Set コピー元エリア = コピー元エリア.Resize(コピー元エリア.Rows.Count - 1) コピー元エリア.Copy Worksheets(2).Range("A1")