添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
笑点低的猴子  ·  LinkPlanner 4.8.4 and ...·  6 月前    · 
挂过科的企鹅  ·  Java ...·  9 月前    · 
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にならない?
 オートフィルタが表示されているか否かの判定は、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
    

     そして、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