ExcelVBA(マクロ)でセル範囲にフィルタをかける方法/AutoFilterメソッドの使い方

IT

VBAを使って、Excel上のフィルタをかける方法のご紹介です。

Advertisements

フィルタのオン/オフ

セル範囲にフィルタをかける/解除する
対象.autofilter
autofilter1
まずはフィルタをオンにする方法です。
autofilter5
通常範囲にフィルタをかける場合、セルを選択してホームタブ並べ替えとフィルタフィルタをクリックしますが……。
autofilter2
これをVBAで行う場合、range(“A1:D7”).autofilterのように記述します。
※フィルタ範囲は自動で表全体に広がるので、range(“A1”)などでも同じ結果になる。
autofilter3
マクロを実行すると、表に対してフィルタが適用されました。
autofilter4
▼をクリックすると、条件で内容を絞ることができることが確認できます。
autofilter6
再度同じ範囲にマクロを実行する(または並べ替えとフィルタ→フィルタをクリックする)ことで、フィルタを解除することができます。

フィルタによる絞り込み

セル範囲にフィルタをかけ、条件で絞り込む
対象.autofilter 列番号 条件
af1
フィルターをかけた上で、条件による絞り込みを行ってみます。
左から1列目「男性」で絞り込む場合、range(“A1:C7”).autofilter 1 “男性”と記述します。
af2
実行すると無事条件が実行されました。列番号を抜かすとエラーになります。
af3
上の列番号と抽出条件は、正式に言えばAutoFilterメソッドのFieldとCriteria1という引数を指定しています。Fieldが列でCriteria1が条件です。
必要なければ覚えなくていいんですが、引数名:=値という形式での指定も可能で、その場合range(“A1:C7″).autofilter field:=3,criteria1:=”会社員”のような記述になります。

※Fieldのような名前付き引数を覚えると、引数の順番を変えても実行できる、必要な引数だけを指定できる、後から見てわかりやすいなどのメリットがある……とされてます。
ただ個人的には、普通に省略して順番に書いたほうが見やすいと思います。

af4
で、上の式を実行すると「男性」だけが表示された状態で「会社員」で絞るので、女性の会社員は表示されない表になります。
af5
もし1列目の絞り込みを解除したい場合は、range(“A1:C7”).autofilter 1を実行します。列数を省略(autofilterのみで実行)すると、フィルター自体が解除されます。
af6
性別による縛りが解除され、会社員が全て表示されました。

フィルタの矢印をオン/オフする

フィルタの矢印を隠す/表示する
対象.autofilter 列数 visibledropdown:=値
afd3
もし名前付き引数を使わない場合、たとえばrange(A1:C7).autofilter 1, , , , falseのように記述します(もちろん条件などを指定してもOKです)。falseで隠し、trueで表示します。

Autofilterメソッドの使い方については以上です。

やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント