【VBA入門】オートフィルターを設定・解除する方法を徹底解説!

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、VBAでフィルターを使ったことがありますか?フィルターを使うと、お手軽にデータを絞り込むことができるので便利ですよね。

ただ、既にフィルターが設定されているときは意図しない動きになってしまうときがあります。そこで今回は、

  • フィルターとは
  • オートフィルターの解除方法

といった基礎的なことから、オートフィルターの状態によって解除・設定をわける方法や、オートフィルターの絞り込みをクリアする方法といった応用的な方法まで、徹底的に解説します!

フィルターとは

はじめに、フィルター機能について簡単に解説します。Excelでは次のようにデータに対してフィルターを付けることで、データを絞り込むことができます。

画像:フィルター設定前

画像:フィルター設定後

画像:得意言語「Ruby」で絞り込み後

この例では、フィルターを設定した後、得意言語を「Ruby」で絞り込んで表示しています。このように、データを簡単に絞り込むことができるのがフィルター機能の特徴です。

VBAでフィルターを設定する場合は、AutoFilterメソッドを使って以下のように書きます。

AutoFilterメソッドの使い方:

Range(セル範囲).AutoFilter Field:=絞り込む列番号, Criteria1:=絞り込む文字列

言葉だけではわかりづらいので、実際に動くサンプルを用意しました。

画像:実行前のセルデータ

サンプルコード:

Sub Test()
  Range("A1:C6").AutoFilter Field:=3, Criteria1:="VBA"
End Sub

画像:実行後のセルデータ

3列目の得意言語を「VBA」で絞り込んだサンプルです。「Field:=3」で3列目、「Criteria1:="VBA"」で絞り込み条件を「VBA」にしています。

このように簡単にデータを絞り込むことができるので、「特定のデータのみCSVファイルに出力する」ような、データを絞り込む処理をVBAで入れたいときはとても便利です。

VBAでオートフィルターを設定する方法については以下で詳しく解説しているので、気になる方は見てみてくださいね!

【VBA入門】オートフィルタでデータ抽出(データのコピー、ソート)
更新日 : 2019年4月28日

オートフィルターを解除する方法とは

ここまでオートフィルターの設定方法について解説してきましたが、データを追加した後にフィルターを再設定したいときもありますよね。そのため、フィルターの解除方法も合わせて覚えておくのがおすすめです!

フィルターを解除する場合は、AutoFilterメソッドを引数なしで使います。

画像:実行前のセルデータ

フィルターを解除するコード:

Sub Test()
  Range("A1:C6").AutoFilter
End Sub

画像:実行後のセルデータ

このように、フィルターを簡単に解除することができます。

絞り込みをクリアする方法とは

フィルターの解除ではなく、絞り込み結果のみクリアしたいときもありますよね。絞り込みをクリアするためには、ShowAllDataメソッドを使って次のように書きます。

画像:実行前のセルデータ

サンプルコード:

Sub Test()
  Activesheet.ShowAllData
End Sub

画像:実行後のセルデータ

このように、簡単に絞り込みをクリアすることができます。ShowAllDataメソッドを使って一度データを全て表示した後、フィルターの条件を変えてデータ取得するケースは多いので、覚えておくと便利です。

オートフィルターの状態に応じてフィルター設定・クリアをわける方法とは

ここまでオートフィルターの設定方法・解除方法・絞り込みクリア方法について解説してきました。

ただ、フィルターの設定状態を意識せずにコードを書くと、フィルターを設定しようとしたときに解除してしまったり、クリアしようとしたときにフィルター設定がなくエラーになってしまったり、意図しない動きになってしまうときがあります。

そのため、オートフィルターの状態によって処理をわけるのがおすすめです!オートフィルターの状態は、AutoFilterModeプロパティを使って次のように確認します。

使い方:

Sub Test()
  'フィルター設定
  Range("A1:C6").AutoFilter Field:=3, Criteria1:="VBA"

  'フィルター状態によって処理分岐
  IF ActiveSheet.AutoFilterMode = True Then
    Debug.Print "フィルター設定済み"
  ElseIF ActiveSheet.AutoFilterMode = False then
    Debug.Print "フィルター未設定"
  End If
    
End Sub

フィルター設定解除・絞り込みクリアはフィルターが設定されていたときの処理に書き、フィルターの設定はフィルターが設定されていないときの処理に書くことで、想定通りの動きになります。

このように、フィルターの条件を意識して処理を作るのがおすすめです!

まとめ

今回は、VBAでオートフィルターを設定・クリア・解除する方法について解説しました!データをたくさん使うExcelだからこそ、フィルターはよく使います。絞り込みのクリア・オートフィルター解除・フィルター再設定などよく使う操作は覚えておくのがおすすめです。

どれも使い方は簡単なので、ぜひ使ってみてくださいね!

\業界最安級/
月額2,980円のプログラミングスクール

✔ 業界最安値の月定額2,980円
✔ 「Q&A掲示板」で平均30分以内に回答がもらえる
✔ 月に一度の「オンライン相談」で悩みを解決
✔ 教材の数は30種類以上
✔ 入会金不要+いつでも退会OK

公式サイトはこちら

Writer

Sanshiro Wakizaka

フリーランス

北海道出身の30歳で、フリーランスエンジニア兼テックライターとして活動中。新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。

Webアプリ、業務アプリ開発において、要件定義 ~ 運用保守まで様々な経験あり。また3歳の娘がいる1児のパパで、日々娘との時間を確保するために仕事を頑張っています!
侍エンジニアでは、【誰でもわかるレベルのわかりやすさ】を意識して、記事を執筆中。

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close