【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だからこそ、フィルターはよく使います。絞り込みのクリア・オートフィルター解除・フィルター再設定などよく使う操作は覚えておくのがおすすめです。

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

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

新卒入社したメーカー系のIT企業で、システムエンジニアとして約5年勤務。
Webアプリ、業務アプリ開発において、要件定義、設計、インフラ、製造、テスト、運用保守など、様々な経験あり。
また、侍ブログ編集部として、これまでに200記事以上の記事を執筆。
現在はフリーランスエンジニア兼テックライターとして活動中。