【VBA入門】オートフィルタでデータ抽出(データのコピー、ソート)

オートフィルタって使っていますか?VBAでオートフィルタを使うとExcelシート上の表で条件に当てはまるデータだけ表示することができて便利です。

この記事では、オートフィルタについてオートフィルタとはなんなのかやオートフィルタの使い方といった基本的な内容から

  • 抽出されたデータをコピーする方法
  • 抽出されたデータを昇順に並び替える方法
  • 抽出されたデータの件数を取得する方法

など応用的な内容についても解説していきます。今回はオートフィルタについて、使い方をわかりやすく解説します!

オートフィルタとは

オートフィルタとは、Excelシート上の表で条件に当てはまるデータを表示し、他のデータは非表示にします。

オートフィルタの使い方

オートフィルタを使うためには、以下のように記述します。

オブジェクト名には対象となるRangeオブジェクトを指定します。引数の[ ]内は省略可能です。

条件を設定する方法

引数の使って条件を設定します。設定についての説明は以下の表のとおりです。

引数定数(値)説明
Fieldフィルタの対象となるフィールド番号を整数で指定。
表の左端列が「1」
Criteria1抽出条件となる文字列を指定。
"=" と指定すると、空白セルが抽出。
"" と指定すると空白以外のフィールドが抽出。
省略すると、抽出条件はALL。
OperatorxlAnd(1)And条件(デフォルト値)
xlOr(2)Or条件
xlTop10Items(3)上位トップ10
xlBottom10Items(4)下位ワースト10
xlTop10Percent(5)上位トップ10%
xlBottom10Percent(6)下位ワースト10%
Criteria22 番目の抽出条件となる文字列を指定
VisibleDropDownTrueフィールドにドロップダウン矢印を表示
Falseフィールドにドロップダウン矢印を非表示

引数Criteria1とCriteria2を使って複合条件でデータ抽出することができます。それではサンプルコードで確認しましょう。サンプルコードでは、2017年8月1か月間の平均気温、最高気温、最低気温のデータを使用しています。

※実際に動かしてみたい方は、以下にサンプルで使用するデータをCSV形式でおいておくので、csv形式で読み込んで使用してください。

使用したデータ(CSV形式)

Sub macro()
    Range("A1").AutoFilter _
        Field:=2, Criteria1:=">=25"
End Sub

AutoFilter07

画像:実行結果

このサンプルコードでは、2列目の平均気温が25度以上のデータを表示するように設定しています。

複数条件やで絞り込む方法

And条件やOr条件など複数の条件で絞り込む場合は、引数Operatorの定数を指定します。

と指定すると複数の条件をすべて満足するデータを表示します。

と指定すると複数の条件のいずれかを満足するデータを表示します。それでは、サンプルコードで確認しましょう。

AutoFilter01

画像:実行結果

このサンプルコードでは、2列目の平均気温が25度以上でかつ30度未満のデータを表示するように設定しています。

部分一致条件で絞り込む方法

文字列の一部分を含む条件でデータの絞り込みを行いたい場合は、ワイルドカードを使います。ワイルドカードとは、あるパターンにマッチするように表現した文字列のことです。例えば「*」(アスタリスク)を使うと0文字以上の任意の文字を指定することができます。

使い方をサンプルコードで確認しましょう。

AutoFilter08

画像:実行結果 オートフィルタ適用前

AutoFilter09

画像:実行結果 オートフィルタ適用後

このサンプルでは、ワイルドカード文字「*」(アスタリスク)を使って「藤」を含む文字列に絞り込んで表示しています。ちなみに、ワイルドカードの使い方については、こちらで詳しく解説しています。

ワイルドカードでは「*」(アスタリスク)や「?」を使いますが、これらの文字を含むパターンでデータを絞り込みたい場合の記述方法についても説明しています。ぜひ、参考にしてください。

【VBA入門】Like演算子(ワイルドカード、エスケープ、否定)
更新日 : 2019年4月19日

解除する方法

オートフィルタを解除するには、AutoFilterを引数なしで記述します。サンプルコードで確認しましょう。

AutoFilter02

画像:実行結果

日付を条件とする場合の注意点

日付を条件とする場合は、注意が必要です。標準の日付の表示形式と同じ場合は、Excel2007以前とExcel2010以降で記述が異なります。Excel2007以前の場合は以下のように記述します。

Excel2010以降の場合は以下のように記述します。

サンプルコードで確認しましょう。サンプルコードはExcel2016で実行結果を確認しています。

AutoFilter03

画像:実行結果

このサンプルコードでは、8月10日から8月20日より前のデータを表示するように設定しています。

抽出されたデータをコピーする方法

抽出されたデータは可視セルですので、可視セルをコピーして貼り付けます。アクティブセル領域に対して、SpecialCellsメソッドで可視セルのみを選択します。サンプルコードで確認しましょう。

AutoFilter04

画像:実行結果

抽出されたデータを昇順に並び替える方法

抽出されたデータを昇順で並び替えるには、AutoFilterオブジェクトのSortプロパティを使用します。抽出されたデータの中でソートが行われます。サンプルコードで確認しましょう。

AutoFilter05

画像:実行結果

このサンプルコードでは、平均気温のデータに対して25度以上30度以下の条件でデータの抽出を行っています。さらに、最高気温のデータで昇順にソートしています。

ただしオートフィルタが解除されても並び順は元に戻りませんので、注意しましょう!なお、オブジェクトのSortプロパティを使ってソートする方法については、こちらで詳しく解説しています。ぜひ参考にしてください。

【VBA入門】Sortでセル範囲内をソートする(並び替える)方法
更新日 : 2019年4月23日

抽出されたデータの件数を取得する方法

VBAでは、オートフィルタで抽出されたデータの件数を取得するプロパティやメソッドがありません。ここではExcelシートの数式で使用するワークシート関数のSABTOTAL関数を使う方法をご紹介します。

AutoFilter06

画像:実行結果

ここでは、ワークシート関数のSABTOTAL関数を使って数値を含むセル数を取得しています。SABTOTAL関数は第1引数で、集計方法を整数値で指定します。以下のような集計が可能です。

説明
1平均
2数値を含むセル数
3空白でないセル数
4最大値
5最小値
6
7標本標準偏差
8標準偏差
9合計
10不偏分散
11標本分散

また、ワークシート関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

【VBA入門】関数の使い方(VBA関数一覧、ワークシート関数の入力)
更新日 : 2019年4月28日

まとめ

ここでは、オートフィルタの使い方について説明しました。表のデータの中から注目したいデータだけを抽出することができるので便利です。使いこなすことができるように、この記事を何度も参考にして下さいね!

Excel VBAを最短で習得したい方へ

元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」

このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta2_vba2

LINEで送る
Pocket

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説