はじめに
Excelでデータ集計や分析を行う際、オートフィルタは欠かせない機能の一つですよね。しかし、フィルタを適用したり解除したりするために、毎回リボンの「データ」タブから「フィルタ」ボタンをクリックするのは、少し手間がかかります。
このフィルタのオン/オフ切り替え作業は、VBAでマクロを作成しておけば、ボタン一発で瞬時に実行できます。この記事では、アクティブなデータ範囲に対してオートフィルタを設定、または解除する、シンプルで便利なマクロをご紹介します。
オートフィルタを切り替えるVBAサンプルコード
ご提示の ActiveCell.AutoFilter
は、アクティブセルを含む表範囲にフィルタを適用する便利な一行ですが、より安定して動作するように、現在のデータ領域(CurrentRegion
)を明示的に指定する方法がおすすめです。
CurrentRegion
は、アクティブセルが含まれる、空白行や空白列で区切られたデータのかたまり全体を指します。
完成コード
' 現在のデータ範囲のオートフィルタを切り替える
Sub ToggleAutoFilter()
' 変数を定義します
Dim targetRange As Range
' アクティブセルが含まれるデータ範囲(表全体)を取得
Set targetRange = ActiveCell.CurrentRegion
' 取得した範囲に対してオートフィルタのオン/オフを切り替え
targetRange.AutoFilter
End Sub
【使い方】
- VBE(
Alt + F11
)を開き、標準モジュールに上記のコードを貼り付けます。 - フィルタを設定したい表の中の、どこか一つのセルを選択(アクティブに)します。
ToggleAutoFilter
マクロを実行します。- 表にフィルタの▼ボタンが設定されます。もう一度マクロを実行すれば、フィルタが解除されます。
コードの解説
Dim targetRange As Range
Range
型の変数 targetRange
を宣言しています。この変数には、フィルタを適用したいセル範囲(表全体)を格納します。
Set targetRange = ActiveCell.CurrentRegion
このコードの重要な部分です。
ActiveCell
: 現在選択されているセルを指します。.CurrentRegion
: そのセルが含まれる、連続したデータ範囲全体を指します。これにより、表のサイズが変わっても、コードを修正することなく、常に表全体を対象にすることができます。
targetRange.AutoFilter
取得した targetRange
(表全体)に対して、.AutoFilter
メソッドを実行しています。このメソッドはトグル式になっており、フィルタが設定されていなければ設定し、既に設定されていれば解除する、という動作を自動で行います。
まとめ
今回は、オートフィルタのオン/オフを切り替える、シンプルで実用的なマクロをご紹介しました。
Range.AutoFilter
メソッドでフィルタを操作できる。- 対象範囲として
ActiveCell.CurrentRegion
を使うと、表の大きさが変わっても対応できるため安定的。
このマクロをクイックアクセスツールバーや、自作のボタンに登録しておけば、データフィルタリング作業が格段にスピードアップします。ぜひ、日々の業務に取り入れてみてください。