エクセル作業ではフィルターを使用することで手軽にデータを絞り込めます。本記事では、フィルターに関する基礎知識や設定・解除方法、フィルターの絞り込みをクリアする方法、フィルターの状態別での設定・解除方法などについて解説します。
フィルターとは
Excelにはシート上の表で条件を満たすデータのみを表示するオートフィルター機能があり、VBAでデータにフィルターをつけることで簡単にデータを絞り込めます。
【フィルター設定前】
【フィルター設定後】
【「営業部」で絞り込み】
上の例ではフィルター設定後に「営業部」で絞り込んで表示しています。
フィルターの使い方
VBAでフィルターを設定する場合は、AutoFilterメソッドで次のように記述します。
【基本構文】
Range(セル範囲).AutoFilter Field:=絞り込む列番号, Criteria1:=絞り込む文字列
先ほど例で使った表を拡張したものを使用します。
【実行コード】
3列目の所属部署を「営業部」で絞り込むには次のコードを実行します。
Sub Test()
Range("A1:C9").AutoFilter Field:=3, Criteria1:="営業部"
End Sub
このように簡単にデータを絞り込めるため、特定のデータのみを出力する場合などに便利です。
【実行結果】
条件の指定方法
引数で条件を設定します。
引数 | 定数(値) | 説明 |
---|---|---|
Field | ー | フィルタリングの対象とするフィールド番号を整数で指定します。 表の左端列が「1」です。 |
Criteria1 | ー | 抽出条件となる文字列を指定します。 “=” と指定すると空白セルが抽出されます。 “” と指定すると空白以外のフィールドが抽出されます。 省略すると、抽出条件はすべてのセルになります。 |
Operator | xlAnd(1) | AND条件(デフォルト値) |
xlOr(2) | OR条件 | |
xlTop10Items(3) | 上位10 | |
xlBottom10Items(4) | 下位10 | |
xlTop10Percent(5) | 上位10% | |
xlBottom10Percent(6) | 下位10% | |
Criteria2 | ー | 2番目の抽出条件となる文字列を指定します。 |
VisibleDropDown | True | フィールドにドロップダウン矢印を表示します。 |
False | フィールドにドロップダウン矢印を非表示にします。 |
引数「Criteria1」と「Criteria2」を使うことで複合条件でデータ抽出できます。
先ほど使用した表を使用します。
3列目の年齢が30歳以上のデータを表示します。
【実行コード】
Sub Test()
Range("A1").AutoFilter
Field:=3, Criteria1:=">=30"
End Sub
【実行結果】
複数条件で絞り込む方法
AND条件やOR条件など、複数の条件で絞り込む場合は、引数Operatorを使用します。
【AND条件】
Operator:x=xlAnd
AND条件は複数の条件をすべて満たすデータを表示します。
【OR条件】
Operator:x=xlOr
OR条件は複数の条件のいずれかを満たすデータを表示します。
今回はAND条件を実行します。
【実行コード】
3列目の年齢が30歳以上かつ40歳未満のデータを表示します。
Sub Test()
Range("A1").AutoFilter
Field:=3, Criteria1:=">=30",
Operator:=xlAnd, Criteria2:="<40"
End Sub
【実行結果】
部分一致条件で絞り込む方法
特定の文字列のを含む条件でデータを絞り込む場合は、ワイルドカードを使用します。Excelでは「*(アスタリスク)」や「?」などの記号を検索したい語句に付けて検索することでその語句を含む文字列を調べられます。
ワイルドカードとは?
情報処理における「ワイルドカード」とは、任意の文字の代わりとして用いられる特殊な文字記号のことです。トランプなどのカードゲームでも、どのカードの代わりとしても使うことができる特別なカードを指します。
説明するにあたって氏名を一時的に変更しました。
【実行コード】
ワイルドカード文字「*」を用いて「田」を含む文字列を持つデータを絞り込みます。
Sub Test()
Range("A1").AutoFilter
Field:=2, Criteria1:="*田*"
End Sub
【実行結果】
オートフィルターの解除方法
データの追加後に再度フィルターを設定する場合など、オートフィルタを解除したい場合は「AutoFilter」を引数をつけずに記述します。
【実行前】
【実行コード】
Sub Test()
Range("A1").AutoFilter
End Sub
【実行結果】
日付を条件とする場合の注意点
日付を条件にする場合には注意が必要です。標準の日付表示形式の場合、Excel2007以前とExcel2010以降で記述方法が異なります。
【Excel2007以前の場合】
Criteria1:=DateValue("2024/8/29")
【Excel2010以降の場合】
Criteria1:="2024/8/29"
2010以降の記述方法で実行します。
【実行コード】
2018年4月1日から2023年4月1日より前のデータを表示します。
Sub Test()
Range("A1").AutoFilter
Field:=4, Criteria1:=">=2018/4/1",
Operator:=xlAnd, Criteria2:="<2023/4/1"
End Sub
【実行結果】
オートフィルターの絞り込みをクリアする方法
フィルターの解除ではなく、絞り込み結果のみをクリアする場合は「ShowAllData」メソッドを用いて次のように記述します。
【実行前】
【実行コード】
Sub Test()
Activesheet.ShowAllData
End Sub
【実行後】
このように簡単に絞り込みをクリアできます。
オートフィルターの状態に応じた指定方法
ここまでオートフィルターの設定・解除方法などについて解説しましたが、フィルターの設定状態によっては、設定しても勝手に解除されたり、逆に解除しようとしてもフィルター設定がなくてエラーになってしまうなど、意図とは異なる挙動になる可能性があります。オートフィルターの状態に応じて処理を分ける必要があります。
オートフィルターの状態は「AutoFilterMode」プロパティを用いて確認します。
【実行コード】
Sub Test()
Range("A1").AutoFilter Field:=3, Criteria1:="営業部"
IF ActiveSheet.AutoFilterMode = True Then
Debug.Print "フィルター設定済み"
ElseIF ActiveSheet.AutoFilterMode = False then
Debug.Print "フィルター未設定"
End If
End Sub
フィルターの解除、絞り込みのクリアはフィルターが設定されている場合の処理に書き、フィルターの設定はフィルターが設定されていない場合の処理に分けることで想定通りの挙動になります。このように、フィルターの条状態別に処理を分けて作るのがおすすめです。
最後に
ここまで、VBAでオートフィルターを設定・解除する方法を中心に解説しました。多くのデータを扱うExcelだからこそ、オートフィルター昨日は重宝されます。よく使う操作は覚えておくと良いでしょう。
関連記事
VBAの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、VBAに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。