和風スパゲティのレシピ

日本語でコーディングするExcelVBA

フィルター抽出中のデータをコピーする

フィルター抽出中のデータをコピーする方法を解説します。

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")