81本目 フィルターの絞り込み解除

VBA100本ノック

VBA100本ノック 81本目の投稿です。Excelの神髄さんの模範解答はコチラ


問題

シートにはテーブル設定されている表と単なる範囲の表が複数混在しています。
全てのフィルターの絞り込みを解除して非表示行が無い状態にしたい。
つまり全ての行が表示されている状態にしてください。
ただしフィルター適用は残してください。→画像参照
※シートは任意

↓この状態のシートを

↓こうしたい

解答

Option Explicit

Sub フィルタ解除()

    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    Dim lastrow As Long
    lastrow = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1 '最終行の一つ下

    
    On Error Resume Next '全て表示されてた場合、テーブルも
    ws.Cells(lastrow, 1).Activate
    ws.ShowAllData
    
    Dim tbl As ListObject
    For Each tbl In ws.ListObjects 'シート内の全テーブルをループ
        tbl.AutoFilter.ShowAllData
    Next
    
    ws.Range("A1").Select

End Sub


“シート上”の絞り込みと”フィルター”の絞りこみがあることに注意ですね。

新人君
新人君

テーブルにアクティブセルがあるかどうかで
エラーになる可能性があることも注意ですよね!

ブチョ
ブチョ

え?そんなこと言ってた?

新人君
新人君

最初の方で言ってるのに・・・・・

Worksheet.ShowAllData メソッド

現在フィルターがかけられているリストに対して、すべての行を表示するメソッド。
※AutoFilter.ShowAllData メソッドとは別。

MS公式に記載は見当たらない(2022年9月時点)が、シート上の”テーブル”をアクティブにした状態で実行すると下記エラーとなる。

原因は不明。

※また、シート上に絞り込みをしていない場合もエラーになるので注意。
動画ではOn Error Resume Nextで回避しています。

AutoFilter.ShowAllData メソッド

AutoFilter内の絞り込みを全て解除するメソッド。
特にいうことはないっす。

ブチョ
ブチョ

私もよく、フィルターしたままExcel閉じちゃうのよね!

新人君
新人君

そういうミスを未然に防止できますね!!

ブチョ
ブチョ

ミス?お茶目と言ってよ♡

新人君
新人君

かわいくないぞ…

あとがたり

おはこんばんちは。uぷ主です。
81本目、ここからの動画は2周目と言わず…YOUTUBEアップと同時にまとめていっちゃいますよ。

さて、フィルターを解除する問題ですね。
最初は正直、「なんでこの問題が81本目に??」と疑問でした。

簡単そうだし、もっと最初の方で出てきても良かったんじゃないかなーなんて。

そしたら…なんと…
“テーブル”をアクティブにしてるかしてないかで結果が変わるとか…
いやいや、「そんなん普通、知らんやん!!」
知ってた人います?

いやー、さすがっす。今回もめちゃくちゃ勉強になりました。

ありがとうございました!!

そして最後までご視聴ありがとうございました。

コメント

タイトルとURLをコピーしました