LoginSignup
3
3

More than 1 year has passed since last update.

オートフィルタのフィルタ表示を確実に消す

Posted at

コード

 この二段構えでオートフィルタの絞り込みと表示を消し去ります。

    'オートフィルタ絞り込みの解除
        If ActiveSheet.Filtermode = True Then
             ActiveSheet.ShowAllData
        End If
      'オートフィルタ表示の解除(A1がオートフィルタ行の左上)
        If Not (ActiveSheet.AutoFilter Is Nothing) Then
            ActiveSheet.Range("A1").AutoFilter
        End If

オートフィルタが表示されているかの判定

 そんなの、ActiveSheet.FilterModeで判定でしょ!と思っていたのですが

Sub autofilter()
    MsgBox ActiveSheet.FilterMode
End Sub

あれ?Trueにならない?
2023-04-17 (2).png
 オートフィルタが表示されているか否かの判定は、ActiveSheet.filtermode = Trueでは不正確です。
 ActiveSheet.filtermodeはオートフィルタで絞り込まれているときはTrueを返しますが、フィルタが表示されていないときはもちろん、フィルタが表示されているが絞り込まれていないときもFalseになります。

 結論から述べると、オートフィルタ表示の有無はActiveSheet.AutoFilterがNothingか否かで判定できます。

  • ActiveSheet.Autofilter Is Nothing = True オートフィルタ表示なし
  • ActiveSheet.Autofilter Is Nothing = False オートフィルタ表示あり
Sub autofilter()
    MsgBox (ActiveSheet.autofilter Is Nothing)
End Sub

2023-04-17 (4).png

 そして、ActiveSheet.Range("A1").AutoFilterのような形でフィルタ表示の有無を切り替えます(A1がオートフィルタが表示される行の一番左上のとき)

 オートフィルタの解除には、絞りこみを解除するShowAllDataとオートフィルタ表示を解除(解除時は設定)するAutoFilterがあります。

 なんとなくActiveSheet.Filtermodeでオートフィルタの有無を判定して

オートフィルタ解除できない
    '解除できません!
        If ActiveSheet.Filtermode = True Then
             ActiveSheet.ShowAllData
             ActiveSheet.Range("A1").AutoFilter
        End If

で全解除できそうな気がしますが、フィルタの絞り込みがかかっていないときは解除されません。

  • 絞りこみを解除するActiveSheet.ShowAllData
     →絞り込み判定をするActiveSheet.Filtermodeで判定
  • オートフィルタ表示を解除(解除時は設定)するActiveSheet.Range("A1").AutoFilter
     →ActiveSheet.autofilter Is Nothing
    で判定をするのが相性がいいです。

なので

    'オートフィルタ絞り込みの解除
        If ActiveSheet.Filtermode = True Then
             ActiveSheet.ShowAllData
        End If
      'オートフィルタ表示の解除(A1がオートフィルタ行の左上)
        If Not (ActiveSheet.AutoFilter Is Nothing) Then
            ActiveSheet.Range("A1").AutoFilter
        End If

とするとオートフィルタの絞り込みも表示もきれいに消せるということになります。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3