AutoFilterMode プロパティ
AutoFilterMode プロパティ(Worksheet オブジェクト)を調べることで、ワークシート上にオートフィルタが設定されているかどうかを確認することができます。ちなみに、オートフィルタは、1つのワークシート上に1つしか設定することができません。
object.AutoFilterMode = boolean
引数・戻り値
- object ・・・ 対象となる Worksheet オブジェクトを指定します。
- boolean ・・・ False のみ設定することができます。False を指定すると、オートフィルタが解除されます。(※ True を指定するとエラーが発生します)
AutoFilter プロパティ(Worksheet オブジェクト)でも確認可能です。オートフィルタが設定されている場合、AutoFilter オブジェクトを返します。設定されていない場合、Nothing を返します。
【オートフィルタが設定されているかどうかを確認する例】
Dim myFilter As AutoFilter
Set myFilter = Activesheet.AutoFilter
If myFilter Is Nothing Then
’オートフィルタが設定されていない場合の処理
Else
’オートフィルタが設定されている場合の処理
End If
FilterMode プロパティ
FilterMode プロパティ(AutoFilter オブジェクト)を調べることで、オートフィルタが何らかの条件で絞りこまれているかどうかを調べることができます。ただし、Excel 2007 以降のみ使用可能です。
object.FilterMode
引数・戻り値
- object ・・・ 対象となる Worksheet オブジェクト または、AutoFilter オブジェクト を指定します。
- オートフィルタが絞りこまれている場合、True を、そうでない場合は、False を返します。ブール型(Boolean)の値を使用します。値の取得のみ可能です。
オートフィルタの状況確認 FilterMode プロパティを使用した例
サンプルVBAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Sub Sample05_1_AutoFilter() Dim myFilter As AutoFilter Set myFilter = ActiveSheet.AutoFilter 'オートフィルタが設定されているかどうかを確認 If Not myFilter Is Nothing Then 'オートフィルタが絞りこまれているかどうかの確認 If ActiveSheet.AutoFilter.FilterMode Then MsgBox "オートフィルタは、絞りこまれています" Else MsgBox "オートフィルタは、絞りこまれていません" End If Else MsgBox "オートフィルタは設定されていません" Exit Sub End If End Sub |
実行結果
Filter.On プロパティ
FilterMode プロパティは、Excel 2007 以降のバージョンでしか使用できないので、それまでのバージョンで判定するには、各列ごとに絞り込みが行われているかどうかを確認します。それを行うには、Filters コレクション から各列の Filter オブジェクト を取得し、On プロパティ(Filters.Item(index).On)の値(ブール型)を調べます。その列が絞り込まれている場合、True を返します。
<各列のオートフィルタが絞りこまれているかを取得>
object.Filters[ .Item ](index).On
<列数を取得>
object.Filters.Count
引数・戻り値
- object ・・・ 対象となる Worksheet オブジェクトを指定します。
- index ・・・ 長整数型(Long)のオブジェクトのインデックス番号を指定します(つまり、各列を表します)。
オートフィルタの状況確認 Filter.On プロパティを使用した例
サンプルVBAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Sub Sample05_2_AutoFilter() Dim flg As Boolean, i As Long, str As String flg = False 'オートフィルタが設定されているかどうかを確認 If ActiveSheet.AutoFilterMode Then For i = 1 To ActiveSheet.AutoFilter.Filters.Count 'オートフィルタが絞りこまれている場合、flg を True If ActiveSheet.AutoFilter.Filters.Item(i).On Then flg = True str = str & i & "列目 " End If Next i Else MsgBox "オートフィルタは設定されていません" Exit Sub End If If flg Then MsgBox "オートフィルタは、" & str & "で絞りこまれています" Else MsgBox "オートフィルタは絞りこまれていません" End If End Sub |