【VBA】オートフィルタ解除&非表示を表示する|.FilterMode/.Outline
作成日:2022-11-29
更新日:2025-10-05

オートフィルタを解除し、行列を再表示する

シートの可視状態を初期化する
' Reset all filters, outlines, and hidden rows/columns|全フィルタ・グループ・非表示行列を解除
Public Function ResetFilterMode(ByVal ws As Worksheet)
On Error GoTo ErrHdl
With ws
' オートフィルタ解除
If .FilterMode Then .ShowAllData
' グループ展開(最大階層まで)
With .Outline
.ShowLevels ColumnLevels:=8, RowLevels:=8
End With
' 非表示解除
.Cells.EntireColumn.Hidden = False
.Cells.EntireRow.Hidden = False
End With
Exit Function
ErrHdl:
Call MsgError("ResetFilterMode") ' エラー発生時の識別用に関数名を渡すと良い
End Functionオートフィルタ解除 → グループ展開 → 非表示行列の表示
フィルタもグループもリセット、一発で見える化
Reset filters and outlines — reveal the full worksheet in one shot.
フィルタ解除|Remove AutoFilter
If ws.FilterMode Then ws.ShowAllData
.FilterModeは オートフィルタや詳細設定フィルタが有効なときにTrue。.ShowAllDataを呼ぶとすべてのデータを再表示(フィルタ解除)する。- エラー回避のため、この条件付きで呼ぶのがベストプラクティス。
グループ展開|Expand Outline Groups
With ws.Outline
.ShowLevels ColumnLevels:=5, RowLevels:=5
End With
.Outlineは行・列のグループ化(アウトライン)機能にアクセスするプロパティ。.ShowLevelsで「第 n 階層まで展開」できる。ColumnLevels:=5としているのは「最大5階層あるかもしれない」という想定。
→ 実際はColumnLevels:=8, RowLevels:=8のように十分大きくしてもOK。
非表示行列を表示|Unhide All Rows and Columns
With ws.Cells
.EntireColumn.Hidden = False
.EntireRow.Hidden = False
End With
- シート上のすべての列・行を対象に、
HiddenをFalseに戻している。 .Cellsに対してEntireColumnやEntireRowを指定することで全体を対象にできる。
Referenced Insights & Citations
- Microsoft Docs: Worksheet.FilterMode property
- Microsoft Docs: Outline.ShowLevels method
- Microsoft Docs: Range.EntireColumn property
| AutoFilter|オートフィルタ |
| Outline|アウトライン |
| ShowLevels|階層展開 |
| Hidden Property|非表示プロパティ |
| Error Handling|エラーハンドリング |
Always reset outlines and filters safely—visibility bugs are the silent killers of Excel macros.

データをすべて削除したい場合は、
フィルタをリセットしたうえでおこなう
2022-11-29
編集後記:
この記事の内容がベストではないかもしれません。
記事一覧
-

ユーザーフォームにドラッグ&ドロップ 【VBA】ドラッグアンドドロップできるユーザーフォーム|ListView -

シート名でシート取得 【VBA】シートをシート名で取得する|Worksheets(name) -

クラスでForEachを使いたい 【VBA】クラスで通常のCollection機能を利用する準備|ForEachが使えない -

数値に+ 記号を追加 【VBA】正の数値に+記号を追加|Sgn -

[VBA]Transpose2D Array 【VBA】配列の縦横変換|WorksheetFunction.Transpose は使わない -

[VBA]Dirで存在確認 【VBA】フォルダとファイルの存在確認|FSOよりもDir