【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]Cells or Range 【VBA】.Cells と .Range の使い分け目安|数千か数万か -

[VBA]Run PowerShellfrom VBA 【VBA】指定場所にあるPowerShellスクリプトを実行する -

[VBA]Paste 2D Arrayresize once 【VBA】二次元配列をシートに貼り付け【範囲をリサイズする】 -

グラフ設定を変更する 【VBA】グラフ設定を動的に変更する -

[VBA]Horizontal Paste1D array 【VBA】一次元配列を横方向にシートに貼り付け【範囲をリサイズする】 -

文字列から拡張子を取得する 【VBA】文字列から拡張子を取得して、文字列として返す|InStrRev