VBA練習問題
VBA100本ノック 81本目:全フィルターの絞り込解除

VBAを100本の練習問題で鍛えます
最終更新日:2021-02-22

VBA100本ノック 81本目:全フィルターの絞り込解除


全てのフィルターの絞り込みを解除して非表示行が無い状態にする問題です。


ツイッター連動企画です。
ツイートでの見やすさを考慮して、ブック・シート指定等を適宜省略しています。

VBAテスト用のサンプルデータは、VBA100本ノックの目次ページ からもダウンロードできます。
マクロVBAを初心者向けの基本から上級者向けの高度な内容までサンプルコードを掲載し解説しています。エクセル関数・機能・基本操作の入門解説からマクロVBAまでエクセル全般を網羅しています。


出題

出題ツイートへのリンク

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

マクロ VBA 100本ノック

マクロ VBA 100本ノック


サンプルファイルです。
https://excel-ubara.com/vba100sample/VBA100_81.xlsm
https://excel-ubara.com/vba100sample/VBA100_81.zip


VBA作成タイム

この下に頂いた回答へのリンクと解説を掲載しています。
途中まででも良いので、できるだけ自分でVBAを書いてみましょう。


他の人の回答および解説を見て、書いたVBAを見直してみましょう。


頂いた回答

解説

すみません。
以下の問題点が頭にあり作成した問題なのに、その後良く考えずにそのまま出題してしまいました。
テーブル範囲に選択セルがある場合、シートのオートフィルター操作が正しく行われません。
これといった推奨できるような有効な解決策も私は見つけ出せていません。

Sub VBA100_81_01()
  'アクティプシート以外ならアクティブにしてから
  Dim ws As Worksheet: Set ws = ActiveSheet
  Dim cRng As Range: Set cRng = ActiveCell
  
  'テーブル範囲外のセルを見つけたいので、空白セルを取得
  On Error Resume Next
  Dim uRng As Range
  Set uRng = ws.UsedRange.SpecialCells(xlCellTypeBlanks)
  If Err Then
    '最初からこれにしてしまえば良い気もします
    Set uRng = ws.Cells(ws.Rows.Count, ws.Columns.Count)
  End If
  On Error GoTo 0
  
  'テーブル範囲外のセルを選択してフィルター絞り込み解除
  Dim rng As Range
  For Each rng In uRng
    If rng.ListObject Is Nothing Then
      rng.Select
      If ws.AutoFilterMode Then
        ws.AutoFilter.ShowAllData
      End If
      Exit For
    End If
  Next
  
  'テーブルのフィルター絞り込み解除
  Dim tbl As ListObject
  For Each tbl In ws.ListObjects
    If Not tbl.AutoFilter Is Nothing Then
      tbl.AutoFilter.ShowAllData
    End If
  Next
  
  cRng.Select
End Sub


今回作成したVBAも解決方法の一つとして、とりあえずこれならという程度のVBAとなっています。
テーブル範囲外のセルを探して、そこをSelectしてからシートのオートフィルターを操作しています。
少ないセル巡回でテーブル範囲外を見つける手段としてSpecialCells(xlCellTypeBlanks)を使いました。


シートのフィルターは1つ、テーブルのフィルターはテーブルごとに存在します。
絞り込み解除して全データ表示するのはShowAllDataです。
テーブルと範囲を同時に使うとこのように面倒なことになる例として捉えてください。
補足はありません。


補足

補足はありません。


サイト内関連ページ

第89回.オートフィルター(AutoFilter)
オートフィルタはExcelのデータベースとしての非常に強力な機能を提供してくれています、マクロVBAで、必要なデータだけに絞り込んで他のシートにコピーしたり、不要なデータを一括で削除したりする場合は、とても高速に処理することができます。マクロVBAでオートフィルタを操作するには、以下のメソッド・プロパティおよびオブジ…
第130回.テーブル操作の概要(ListObject)
テーブルのVBAでの操作で使用するオブジェクトの概要の説明です、テーブルは、セルの範囲を表(テーブル)に変換することで、関連するデータの管理と分析を容易にできるエクセルの機能で、以前はリストと呼ばれていました。テーブルを作成して書式設定することで、データを視覚的にグループ化して分析しやすくできます。
第131回.テーブル操作のVBAコード(ListObject,DataBodyRange)
テーブル操作の具体的なVBAコードをパターン別に掲載します、テーブルの全体的な構成は・テーブル全体・見出し行 ・データ範囲 ・集計列 ・集計行 VBAでは、これらのオブジェクトを使い各要素にアクセスします。テーブル全体のオブジェクトがListObjectで、シート内に複数テーブルが作成可能なので、シート内のListO…




同じテーマ「VBA100本ノック」の記事

78本目:グラフのデータ範囲拡張
79本目:Wordにセル範囲を図として挿入
80本目:読み取り専用で保存できないブックにする
81本目:全フィルターの絞り込解除
81本目:全フィルターの絞り込解除
82本目:ブックのドキュメントプロパティを取得
83本目:請求書を作成してPDF出力
84本目:ブックの自動バックアップ
85本目:請求日から入金予定日を算出
86本目:全シートの総当たり表を作成
87本目:数式のシート間の依存関係


新着記事NEW ・・・新着記事一覧を見る

エクセル馬名ダービー|エクセル雑感(2021-07-21)
在庫を減らせ!毎日棚卸ししろ!|エクセル雑感(2021-07-05)
日付型と通貨型のValueとValue2について|エクセル雑感(2021-06-26)
DXってなんだ? ITと何が違うの?|エクセル雑感(2021-06-24)
エクセルVBA 段級位 目安|エクセル雑感(2021-06-21)
ローカル版エクセルが「Office Scripts」に変わる日|エクセル雑感(2021-06-10)
新関数SORTBYをVBAで利用するラップ関数を作成|VBA技術解説(2021-06-12)
VBA今日のひとこと/VBA今日の教訓 on Twitter|エクセル雑感(2021-06-10)
VBAの演算子まとめ(演算子の優先順位)|VBA技術解説(2021-06-09)
画像が行列削除についてこない場合の対処|VBA技術解説(2021-06-04)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.Excelショートカットキー一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.RangeとCellsの使い方|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.マクロって何?VBAって何?|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
9.セルに文字を入れるとは(Range,Value)|VBA入門
10.とにかく書いてみよう(Sub,End Sub)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ