【ExcelVBA】オートフィルタで絞られているかを判定する

ExcelVBA, オートフィルタ

テスト対象のテーブル



テスト対象テーブルを使いたい場合は、↓テーブルをコピーしてエクセルの A1 に貼り付けてください。



商品名個数
りんご4
みかん3
めろん5
いちご2
みかん1

オートフィルタで絞られているかを判定する

絞られている状態で判定(パターン1)

Sub Sample()

    'オートフィルタ設定
    ThisWorkbook.ActiveSheet.Range("A1").AutoFilter _
      Field:=1, _
      Criteria1:="みかん"
    
    '絞られているか判定
    If ThisWorkbook.ActiveSheet.AutoFilter.FilterMode = True Then
      MsgBox "絞られています!"
    Else
      MsgBox "絞られていません。だめ!"
    End If

    'オートフィルタ解除
    ThisWorkbook.ActiveSheet.AutoFilterMode = False
    
End Sub

絞られているとき 9行目の FilterMode プロパティは True を返し、絞られていないときは False を返します。上記の例は True を返します。注意点として、4行目のオートフィルタ設定の記述がない状態で実行すると9行目でエラーとなりプロシージャは停止します。4行目のフィルタ設定があれば、絞り込み設定(5行目~6行目)が無くてもエラーは起きません。


結果


実行前のテーブル


★オートフィルタの設定状態を判定したい場合

絞られていない状態で判定(パターン2)

Sub Sample()

    'オートフィルタ設定
    ThisWorkbook.ActiveSheet.Range("A1").AutoFilter
    
		
		
    '絞られているか判定
    If ThisWorkbook.ActiveSheet.AutoFilter.FilterMode = True Then
      MsgBox "絞られています!"
    Else
      MsgBox "絞られていません。だめ!"
    End If

    'オートフィルタ解除
    ThisWorkbook.ActiveSheet.AutoFilterMode = False
    
End Sub

パターン2はパターン1の 5行目~6行目 の絞り込み設定を削りました。そのため、4行目のオートフィルタ設定は施されていますが絞り込みはされません。 なので上記の 9行目の FilterMode プロパティは False を返します。この判定結果は下記になります。


結果


実行前のテーブル