📊 Excel VBA Top100
🔄

FilterData

データ処理

A列のデータをフィルタリングしてC列にコピーします

指定した列の値でデータを絞り込み、条件に一致する行だけを表示するオートフィルターを自動設定するマクロです。Excelのオートフィルター機能をVBAで自動化し、フィルター条件の設定をダイアログから素早く行えます。複雑なフィルター設定を何度も繰り返す作業や、特定の条件でのデータ確認を頻繁に行う業務に適しています。フィルター解除も一括で行えるため、元データへの切り替えもスムーズです。AdvancedFilterを利用しているため、重複を除いた一意リストの抽出にも応用でき、フィルター条件をシート上に用意すればAND/OR条件の複雑な絞り込みにも発展させられます。手動でオートフィルターを設定し直す繰り返し作業から解放され、決まった条件のデータ確認が数秒で終わります。抽出結果を別列に出す方式のため、元データの表示状態を変えずに結果だけ取得できるのも扱いやすい点です。

FilterData デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: アクティブシートのA列にデータを用意してマクロを実行。AdvancedFilterによりA列のデータがC列にコピーされます。

🎯 活用シーン

  • ✓大量の売上データから特定の月や地域のデータだけを素早く表示して分析したいとき
  • ✓顧客リストからステータスが「未対応」の案件だけを表示して対応業務を効率化したいとき
  • ✓在庫データから残量が一定以下の商品だけを抽出して発注リストを素早く確認したいとき
  • ✓問い合わせ一覧から本日分だけを毎朝抽出して、朝会用の確認リストを作成したいとき
  • ✓大量の商品リストから対象カテゴリだけを抽出し、キャンペーン対象の確認作業を高速化したいとき

💡 実装のヒント

  • ▸フィルターを解除してすべての行を再表示したい場合は、マクロを再実行して空の検索条件を入力するか、データタブから「フィルターのクリア」を実行してください。
  • ▸数値データのフィルタリングでは「>1000」「<=500」など比較演算子を含む条件も指定できます。
  • ▸複数条件のフィルタリングが必要な場合は、マクロを連続して実行することで複数条件の組み合わせも実現できます。
  • ▸元データの表示はそのまま維持されるため、フィルターで行が隠れて他の作業に影響する心配がありません。
  • ▸抽出結果をCopyRowsIfConditionやExportToCSVと組み合わせれば、条件抽出→別シート化→CSV納品までを一気通貫で自動化できます。

💻 VBAコード

Sub FilterData()
    On Error GoTo ErrHandler
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    If ws Is Nothing Then
        MsgBox "アクティブなシートが見つかりません", vbCritical
        Exit Sub
    End If
    
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    If lastRow < 2 Then
        MsgBox "データが見つかりません", vbCritical
        Exit Sub
    End If
    
    ws.Range("A1:A" & lastRow).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=ws.Range("C1"), Unique:=False
    
Exit Sub
ErrHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub