【Excelマクロ】フィルターで抽出後のデータだけをコピーする

Excelでフィルター機能を使って特定のデータを絞り込んだあと、その結果だけをコピーしたいことがあります。

見えているデータだけを別シートにコピーしたいのに、「非表示の行までコピーされてしまう…」というトラブルはよくある話です。

今回は、VBAを使って抽出結果だけを正確にコピーする方法を紹介します。

フィルター結果だけをコピーするには?

通常のコピーでは、見た目では非表示の行も対象に含まれてしまいます。

そこで、「可視セルだけをコピーする」という考え方が必要になります。

そのために使うのが、次のようなコードです。

Sub CopyFilteredData()

    Dim src As Worksheet
    Dim dst As Worksheet

    Set src = Worksheets("元データ")
    Set dst = Worksheets("コピー先")

    ' フィルター済みのデータ範囲を指定(例:A1:D100)
    With src.Range("A1").CurrentRegion
        ' 可視セルのみをコピー
        .SpecialCells(xlCellTypeVisible).Copy
        ' コピー先の先頭セルに貼り付け
        dst.Range("A1").PasteSpecial xlPasteValues
    End With

    Application.CutCopyMode = False
    MsgBox "フィルター結果をコピーしました"

End Sub

コードの解説

このマクロは次のような流れで処理をしています。※フィルターがかかっている前提で設定しています。

  1. コピー元と貼り付け先のシートを指定
  2. CurrentRegionでフィルター対象の表範囲を取得
  3. .SpecialCells(xlCellTypeVisible)表示されているセルだけを抽出
  4. PasteSpecial xlPasteValues値だけを貼り付け

実装するメリット

この方法を使うことで、次のような効果があります。

  • 非表示データを誤ってコピーするミスを防げる
  • 自動処理で作業スピードが格段に上がる
  • 表の整形や出力処理の精度が上がる

とくにレポート作成や、条件付きのデータ出力において非常に有効です。

注意点と応用例

注意すべき点

  • SpecialCells(xlCellTypeVisible)は、フィルターがかかっていないとエラーになることがあります
  • フィルターを事前に適用しておく必要があります(自動でかけたい場合は AutoFilter を組み合わせてください)

応用:フィルターもVBAで設定する

フィルターの設定からコピーまで一気に行いたい場合は、次のような書き方も可能です。

Sub FilterAndCopy()

    Dim src As Worksheet
    Dim dst As Worksheet

    Set src = Worksheets("元データ")
    Set dst = Worksheets("コピー先")

    ' フィルターの設定(例:C列に「OK」のデータだけを表示)
    With src
        .Range("A1").CurrentRegion.AutoFilter Field:=3, Criteria1:="OK"
        .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
    End With

    dst.Range("A1").PasteSpecial Paste:=xlPasteValues

    Application.CutCopyMode = False

    MsgBox "フィルター結果をコピーしました"

End Sub

このようにすることで、「フィルター条件を指定 → 抽出されたデータのみをコピー」という流れを完全に自動化できます。

まとめ

「抽出したデータだけをコピーしたい」というのは、Excel業務でよくあるニーズです。

マクロを使えば、次のようなメリットがあります。

  • フィルター結果だけを正確に抽出できる
  • 作業スピードとミス防止の両立が可能
  • 応用すれば抽出からコピーまでワンステップにできる

VBAでコピー処理を組む際は、「可視セルだけを扱う」という考え方がとても重要です。

業務の一手間を減らす一歩として、ぜひこのマクロを活用してみてください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール