Excelで大量データの管理や抽出作業を効率化するためにオートフィルター機能を使う機会は多いですが、VBAでフィルター操作を自動化しようとすると「フィルターを解除せずに条件だけ変えたい」「設定だけ変更して絞り込み結果を維持したい」というニーズが出てきます。
この記事では「VBAでオートフィルターを設定のみ行う方法」に特化し、既存のフィルターを解除せずに条件だけ変更する方法、解除せずにフィルターの条件を動的に変更するポイント、設定変更時の注意点を具体例つきでわかりやすく解説します。
業務効率化のためにフィルター自動処理を構築したい方、繰り返しの絞り込み作業を省力化したい方はぜひ参考にしてください。
目次
✅ なぜ「設定のみ」でフィルターを操作する必要があるのか
通常、VBAでフィルターを適用する際には
Range("A1").AutoFilter Field:=2, Criteria1:="東京"
のように記述します。しかし、このコードはフィルターが既に適用されている場合、
- 条件が上書きされる(目的通りの場合もある)
- 他の列のフィルター設定が維持されないことがある
- 無意識にフィルター解除→再設定が走る場合がある
といった挙動が生じる場合があります。
特に、他列で既にかかっているフィルターを維持しつつ特定列の条件だけ変更したい場合や、フィルター解除を伴う処理を避けてデータ表示状態を保ちたい場合には「設定のみ」で条件変更する方法を理解しておくことが重要です。
✅ VBAでフィルターの「設定のみ」を行う基本
Excel VBAでオートフィルターの設定のみ行いたい場合、
① AutoFilterMode と FilterMode の理解
AutoFilterModeはシートにフィルターが設定されているかどうかを示す(表示状態)FilterModeはフィルターで絞り込み中かどうかを示す(実際にフィルタリングされている状態)
フィルターが設定済みかを確認してから処理する例:
If ActiveSheet.AutoFilterMode = False Then
Range("A1").AutoFilter
End If
このコードでフィルターが設定されていなければ設定することができます。
【VBA】フィルター機能【複数条件・複数列フィルター】の操作設定
② 他の列のフィルター条件を解除せずに対象列だけ変更する方法
対象列のみ条件変更を行いたい場合は、Field と Criteria1 を指定して再設定するだけでOKです。
例として、「B列に“東京”という条件だけを設定する場合」:
With ActiveSheet.AutoFilter
.ShowAllData ' データ表示が絞り込み状態なら全表示に戻す(必要時)
.Range.AutoFilter Field:=2, Criteria1:="東京"
End With
ただし、.ShowAllData を使用すると他のフィルター条件も解除されるため、条件を維持したい場合は使わずに直接下記のように書きます。
ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:="東京"
この場合、既存のフィルター設定は維持され、B列のみ条件変更が適用されます。
✅ サンプル:フィルター設定のみ動的に変更するVBA例
以下は「B列の条件を都度変更し、既存フィルター状態は維持する」実践的なサンプルです。
Sub ChangeFilterOnly()
Dim targetField As Long
Dim targetCriteria As String
targetField = 2 ' B列
targetCriteria = "東京"
' フィルターが設定されていない場合は設定する
If ActiveSheet.AutoFilterMode = False Then
ActiveSheet.Range("A1").AutoFilter
End If
' 指定列だけフィルター条件を変更(設定のみ)
ActiveSheet.Range("A1").AutoFilter Field:=targetField, Criteria1:=targetCriteria
End Sub
このコードを使用すると**「フィルター設定のみ」を行い、既存のフィルター設定を解除せずに条件だけ変更することが可能**です。
✅ 条件を複数指定する場合(InArrayの応用)
「特定列に複数条件を設定したい」場合も条件設定のみで可能です。
Sub ChangeFilterMultipleCriteria()
Dim arrCriteria As Variant
arrCriteria = Array("東京", "大阪")
If ActiveSheet.AutoFilterMode = False Then
ActiveSheet.Range("A1").AutoFilter
End If
ActiveSheet.Range("A1").AutoFilter Field:=2, Criteria1:=arrCriteria, Operator:=xlFilterValues
End Sub
この場合も他の列のフィルター条件は解除されず、設定のみ適用されます。
■フィルター設定のみを使う際の注意点
- データが非表示行になっている場合
.AutoFilter Field:=nの記述だけで再フィルタリングすると非表示行が変わる可能性があるため事前に必要に応じて.ShowAllDataでリセットするか管理する。
- フィルター設定行の指定
"A1"で設定する場合は見出し行である必要があります。見出し行が異なる場合は見出し行の範囲の左上セルを指定します。
- 他の列のフィルター条件確認・取得が必要な場合
.AutoFilter.Filtersコレクションを活用して現在の条件を取得・記録しておくと条件維持の管理がしやすくなります。
■フィルター設定のみを使った業務効率化の具体例
- 大量データの複雑な絞り込みを手動で毎回行っていた作業をボタン1つで切り替えられるようにできる
- 見積や売上データで「特定担当者だけ」「特定エリアだけ」を素早く切り替えながら確認できる
- 既存フィルター解除のミスがなくなり、作業トラブルが減少する
- RPA化する場合も安定的に動作させられる
■まとめ:フィルターの「設定のみ」はVBAで簡単に制御可能
Excel VBAでオートフィルターを「設定のみ」で操作する方法を理解すれば、
✅ フィルター解除せず条件だけ変更できる
✅ 他の列の条件を維持できる
✅ 毎回の手動切替を自動化できる
という大きな効率化が実現可能です。
まずは今回紹介した
ActiveSheet.Range("A1").AutoFilter Field:=対象列番号, Criteria1:="条件"
の基本形を使いこなし、必要に応じて複数条件設定、解除制御、既存条件管理へステップアップしていきましょう。