【Excel VBA】オートフィルタで行を抽出する基本コードとやさしい解説

VBA & Excel
スポンサーリンク
スポンサーリンク

はじめに

Excelで作業をしていると、
「特定の条件に合う行だけを表示したい」
「大量のデータから必要な行だけを抽出したい」
そんな場面がよくあります。

VBAでは、オートフィルタを使うことで、
条件に合う行だけをすばやく抽出できます。

ここでは、行をオートフィルタで抽出する基本のコードと、そのしくみを解説します。

まずはコードを確認

Range("A1").AutoFilter Field:=1, Criteria1:="東京"

もっともシンプルな書き方です。
A列(1列目)で「東京」に一致する行だけを抽出します。

コードのしくみを解説

AutoFilter の基本構造

Range("A1").AutoFilter Field:=列番号, Criteria1:=条件
  • Field:どの列で絞り込むか
  • Criteria1:抽出条件

A1セルは「見出し」を指すことが多く、
見出し行に対して AutoFilter を設定するのが一般的です。

具体的な例で理解する

1列目で「完了」の行だけ抽出する

Range("A1").AutoFilter Field:=1, Criteria1:="完了"

数値条件で抽出する(例:100以上)

Range("A1").AutoFilter Field:=2, Criteria1:=">=100"

複数条件で抽出する(OR条件)

Range("A1").AutoFilter Field:=1, Criteria1:="東京", Operator:=xlOr, Criteria2:="大阪"

部分一致で抽出する(LIKE検索)

Range("A1").AutoFilter Field:=1, Criteria1:="*支店*"

ワイルドカード(*)を使うと柔軟に検索できます。

フィルタを解除する

ActiveSheet.AutoFilterMode = False

フィルタを完全に解除したいときに使います。

あわせて知っておきたいポイント

フィルタを設定する前に、既存のフィルタを解除する

If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If

重複したフィルタ設定を避けられます。

フィルタ範囲を明示的に指定する

Range("A1:D100").AutoFilter Field:=2, Criteria1:=">0"

データ範囲が明確な場合は、範囲指定が安全です。

テーブル(ListObject)に対するフィルタ

ListObjects("Table1").Range.AutoFilter Field:=1, Criteria1:="有効"

テーブル形式のデータでは、ListObject を使うと安定します。

使うときに気をつけたいこと

  • 見出し行が正しく設定されていることが前提
    → 見出しがないと意図しない列が抽出されることがあります。
  • 結合セルがあるとフィルタが正しく動作しないことがあります
    → 可能なら結合を避けるのが安全です。
  • 抽出後の行操作(削除・コピー)は慎重に
    → 可視セルだけを扱う場合は SpecialCells(xlCellTypeVisible) を使います。

まとめ

  • AutoFilter を使うと、条件に合う行だけを簡単に抽出できる
  • 数値・文字列・部分一致・複数条件など柔軟に設定可能
  • フィルタ解除や範囲指定など、実務で役立つポイントも多い
  • 見出し行と結合セルに注意すると、安定したコードになる

オートフィルタを使いこなせると、大量データの整理がぐっと楽になります。


decopon
decopon

オートフィルタは、実務でのデータ整理に欠かせない機能です。
VBAで自動化することで、毎日の作業が静かに、でも確実に軽くなります。

moco
moco

必要な行だけ、そっと見せてくれるのがフィルタのいいところ。
VBAは、そんな気配りも得意なんだなあ。

コメント

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