VBAで行や列を非表示・再表示するには、Rows("5:10").Hidden = True または Columns("C:E").Hidden = False の1行で実現できます。条件に応じて自動切り替えするマクロを組めば、表示状態の管理も完全自動化できます。
この記事では、次の内容を順番に解説します。
- 行・列の非表示と再表示の基本コード
- セルの値を条件にして自動で非表示にする方法
- ボタンで表示・非表示を切り替えるトグル方式
- 全行・全列をまとめて再表示する方法
行と列を非表示・再表示するには?
Rows または Columns で対象を指定し、Hidden プロパティを True(非表示)または False(再表示)に設定します。
'5〜10行目を非表示にする
Sub HideRows()
Rows("5:10").Hidden = True
End Sub
'5〜10行目を再表示する
Sub ShowRows()
Rows("5:10").Hidden = False
End Sub
'C〜E列を非表示にする
Sub HideColumns()
Columns("C:E").Hidden = True
End Sub
'C〜E列を再表示する
Sub ShowColumns()
Columns("C:E").Hidden = False
End Sub
行番号・列番号で指定することもできます。
'3行目を非表示(番号指定)
Rows(3).Hidden = True
'3列目(C列)を非表示(番号指定)
Columns(3).Hidden = True
'シートを指定して操作する場合
Worksheets("データ").Rows("5:10").Hidden = True
セルの値を条件にして自動で非表示にするには?
「A列が空欄の行を非表示」「特定のキーワードが含まれる行だけ表示」のように条件に応じて自動で表示を切り替えます。
'A列が空欄の行を非表示にする
Sub HideBlankRows()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For i = 2 To lastRow
If Trim(ws.Cells(i, 1).Value) = "" Then
ws.Rows(i).Hidden = True
Else
ws.Rows(i).Hidden = False
End If
Next i
Application.ScreenUpdating = True
MsgBox "空欄行を非表示にしました。"
End Sub
'D列が「完了」の行だけ表示して、それ以外を非表示にする
Sub ShowCompletedOnly()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For i = 2 To lastRow
ws.Rows(i).Hidden = (ws.Cells(i, 4).Value <> "完了")
Next i
Application.ScreenUpdating = True
End Sub
ボタンで表示・非表示をトグル切り替えするには?
1つのボタンを押すたびに非表示⇔再表示が切り替わるトグル方式は、.Hidden の現在値を反転させるだけで実現できます。
'ボタンを押すたびにC列の表示・非表示を切り替える
Sub ToggleColumnC()
With Columns("C")
.Hidden = Not .Hidden '現在の状態を反転
End With
End Sub
'ボタンを押すたびに5〜10行目を切り替える
Sub ToggleRows5to10()
With Rows("5:10")
.Hidden = Not .Hidden
End With
End Sub
全行・全列をまとめて再表示するには?
非表示になっている行・列をすべて一括で再表示するリセット用マクロです。
'シート内の全行を再表示
Sub ShowAllRows()
ActiveSheet.Rows.Hidden = False
MsgBox "全行を再表示しました。"
End Sub
'シート内の全列を再表示
Sub ShowAllColumns()
ActiveSheet.Columns.Hidden = False
MsgBox "全列を再表示しました。"
End Sub
'行・列まとめてリセット
Sub ShowAllRowsAndColumns()
With ActiveSheet
.Rows.Hidden = False
.Columns.Hidden = False
End With
MsgBox "全行・全列を再表示しました。"
End Sub
まとめ
Rows("5:10").Hidden = Trueで行を非表示、Falseで再表示Columns("C:E").Hidden = Trueで列を非表示、Falseで再表示- ループと条件分岐を組み合わせると セルの値に応じた自動切り替えができる
.Hidden = Not .Hiddenでボタン1つで表示・非表示をトグル切り替えできるApplication.ScreenUpdating = Falseをループ前に入れると大量行の処理が速くなる
よくある質問
非表示にしたデータは削除されますか?
削除されません。Hidden = True は表示を隠すだけで、データはそのまま保持されています。Hidden = False に戻せばいつでも再表示できます。
非表示の行・列を印刷しないようにするには?
非表示の行・列は印刷されません。印刷前にHidden = Trueにしておくだけで、自動的に印刷から除外されます。印刷後に再表示する処理もセットにしておくと管理しやすくなります。
グループ化(折りたたみ)との違いは何ですか?
非表示は行・列を完全に隠します。グループ化は「+/-」ボタンで折りたたみ・展開ができる機能で、ユーザーが手動で表示を切り替えられます。VBAでグループ化するには Rows("5:10").Group・解除は Rows("5:10").Ungroup です。
特定の列を複数のボタンで個別に制御したいです
各ボタンに列名を指定したToggleマクロを1つずつ割り当てる方法が最も簡単です。列名をConstで定数化しておくと、後から変更するときに1か所だけ直せば済みます。
非表示になっている行数を確認するには?
ループで Rows(i).Hidden = True の行をカウントする方法が基本です。WorksheetFunction.Subtotal(103, Range("A:A")) は表示されているセルのみをカウントするため、全件数との差分で非表示行数を計算する方法もあります。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



