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本目に??」と疑問でした。
簡単そうだし、もっと最初の方で出てきても良かったんじゃないかなーなんて。
そしたら…なんと…
“テーブル”をアクティブにしてるかしてないかで結果が変わるとか…
いやいや、「そんなん普通、知らんやん!!」
知ってた人います?
いやー、さすがっす。今回もめちゃくちゃ勉強になりました。
ありがとうございました!!
そして最後までご視聴ありがとうございました。
コメント