Excelでデータを管理していると、 特定の条件の行だけを抜き出して、別シートにまとめたい という場面はとても多いです。
たとえば、
- 部署が「営業」のデータだけ抽出したい
- ステータスが「未対応」の行だけ一覧にしたい
- 担当者ごとにシートを分けたい
今回は、こうした作業をExcelVBAで完全自動化する方法をご紹介します。
この記事でできること
- 指定した列を条件に自動フィルターを実行
- 抽出された行だけをコピー
- 結果を別シートに自動で出力
- 元データはそのまま保持
毎回フィルター → コピー → 貼り付けを手作業で行っている方には、 特におすすめです。
今回のサンプルデータ構成
元データシート(シート名:元データ)
シート名を「元データ」に変更して、下記の通りデータを入力してください。

抽出結果シート(シート名:抽出結果)
マクロ実行後、 部署が「営業」の行だけが自動で出力されます。
自動フィルター → 別シートへ出力するマクロ(コピペOK)
以下のコードを標準モジュールに貼り付けてください。
Option Explicit
Sub FilterAndCopyToAnotherSheet()
Dim wsSrc As Worksheet
Dim wsDst As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim filterCol As Long
Dim filterValue As String
Dim rng As Range
' ===== 設定値 =====
Set wsSrc = Worksheets("元データ") ' 元データのシート名
filterCol = 2 ' フィルターする列(B列=2)
filterValue = "営業" ' 抽出条件
' ==================
' 抽出結果シートを準備
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("抽出結果").Delete
Application.DisplayAlerts = True
On Error GoTo 0
Set wsDst = Worksheets.Add
wsDst.Name = "抽出結果"
' 元データの最終行・最終列を取得
lastRow = wsSrc.Cells(wsSrc.Rows.Count, 1).End(xlUp).Row
lastCol = wsSrc.Cells(1, wsSrc.Columns.Count).End(xlToLeft).Column
Set rng = wsSrc.Range(wsSrc.Cells(1, 1), wsSrc.Cells(lastRow, lastCol))
' 既存のフィルターを解除
If wsSrc.AutoFilterMode Then
wsSrc.AutoFilterMode = False
End If
' オートフィルターを設定
rng.AutoFilter Field:=filterCol, Criteria1:=filterValue
' 抽出結果(ヘッダー+データ)をコピー
rng.SpecialCells(xlCellTypeVisible).Copy
wsDst.Cells(1, 1).PasteSpecial xlPasteValues
wsDst.Cells(1, 1).PasteSpecial xlPasteFormats
Application.CutCopyMode = False
' フィルター解除
wsSrc.AutoFilterMode = False
wsDst.Columns.AutoFit
MsgBox "抽出結果を別シートに出力しました。", vbInformation
End Sub
コード解説(初心者向け)
① フィルター条件の指定
filterCol = 2
filterValue = "営業"
ここで、
- どの列で
- どんな条件で
抽出するかを指定しています。 列番号は「A列=1、B列=2…」です。
② 抽出結果だけを取得するポイント
rng.SpecialCells(xlCellTypeVisible)
これは、 フィルター後に「表示されている行だけ」を取得する命令です。
これを使うことで、 非表示(条件に合わない)行を含めずにコピーできます。
③ 元データを壊さない設計
- 元シートはコピーのみ
- フィルターは最後に解除
- 抽出結果は新しいシートに出力
そのため、 何度実行しても元データは安全です。
応用例
① 数値条件で抽出したい場合
rng.AutoFilter Field:=4, Criteria1:=">=10"
② 複数条件(OR条件)
rng.AutoFilter Field:=2, Criteria1:=Array("営業", "総務"), Operator:=xlFilterValues
③ 日付条件で抽出
rng.AutoFilter Field:=1, Criteria1:=">=2025/04/01"
実行手順
- 元データシートを用意する
- Alt + F11 → 標準モジュールを追加
- マクロを貼り付け
- 条件を自分のデータに合わせて変更
- マクロを実行
まとめ:抽出作業はVBAで自動化するのが正解
指定条件でのデータ抽出は、 Excel業務で最もよく発生する作業のひとつです。
- 手作業だとミスが出やすい
- 件数が増えるほど時間がかかる
- 毎回同じ操作を繰り返す
今回のマクロを使えば、 こうした作業をワンクリックで安全に自動化できます。
ぜひ、日々のExcel業務に取り入れてみてください。


コメント