VBAのAdvancedFilter(フィルタオプション)で手作業のフィルター地獄から脱出しよう! 

【業務効率化】VBA
スポンサーリンク

「あぁ、またこの条件で抽出しなきゃ……。A支店で、かつ売上が10万円以上、でもB商品は除外して……って、フィルターを何度もカチカチするの、もう限界!」

そんなふうに感じたことはありませんか?

今日は、そんな「手作業のフィルター地獄」から私たちを解放してくれる便利なVBAテクニック、「AdvancedFilter」についてご紹介します。 

【業務効率化】VBAの記事を見る 

1. なぜ「オートフィルター」には限界があるのか?

普段使いになじみのある「オートフィルター」は手軽で便利ですが、実は複雑な条件を指定する抽出にはあまり向いていません。

  • 「AまたはB、かつC」といった複雑な組み合わせが作りにくい
  • 抽出された結果を、別のシートへ転記する手間に時間がかかる
  • 条件を変更するたびに、何度もクリック操作を繰り返す必要がある

これらの課題を解決するのがAdvancedFilterです。例えるなら、オートフィルターが「手動のふるい」なら、AdvancedFilterは「全自動の高性能選別機」と言えます。

2. 実践!AdvancedFilterのコード

まずは、以下のコードをご覧ください。

あらかじめシート上に抽出条件を記載しておき、ボタン一つで指定の場所に結果を書き出す」という、実務で頻出する実用的な構成にしています。

Sub SuperFastExtract()
    ' === 変数の設定 ===
    Dim wsData As Worksheet
    Dim wsCriteria As Worksheet
    Dim lastRow As Long
   
    ' シートの指定(お使いのシート名に合わせて変えてください)
    Set wsData = ThisWorkbook.Worksheets("データ一覧")
    Set wsCriteria = ThisWorkbook.Worksheets("抽出条件")
   
    ' データの最終行を取得(データの終わりを自動で見つける)
    lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
   
    ' === AdvancedFilterの実行 ===   
    wsData.Range("A1:E" & lastRow).AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=wsCriteria.Range("A1:C2"), _
        CopyToRange:=wsData.Range("G1"), _
        Unique:=False ' 重複を許す場合はFalse
       
    MsgBox "抽出が完了しました!", vbInformation
End Sub

ここがポイント!コードの解説

  1. Action:=xlFilterCopy: これを指定するだけで、抽出結果を指定の場所(CopyToRange)に一瞬でコピペしてくれます。
  2. CriteriaRange: ここに「条件をまとめたセル範囲」を指定します。

Excelのシート上に条件を書いておけるので、VBAのコードを書き換えなくても、シートの文字を変えるだけで、柔軟に抽出条件をコントロールできるようになります。

またAdvancedFilterを使うときのコツは「条件範囲の見出しを、元データの見出しと一言一句一致させること」です。

スペースや文字がたった一文字でも異なると、エラーの原因になってしまいます。「プログラムがうまく動作しないな」と感じたときは、まず元の見出しをそのまま条件範囲にコピペして揃えてみてください。

ちなみに、ループ処理(For Eachなどで1行ずつチェックする方法)を使ってデータ抽出することも可能です。
しかし、データ量が大量になると処理に時間がかかり、場合によっては画面が固まってしまうこともあります。
その点、AdvancedFilterはExcelに標準搭載されている機能をVBAから直接呼び出して実行するため、高速に処理が完了します!

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました