行を非表示
「特定の行を隠したい」「条件に合う行だけ非表示にしたい」「選択範囲を一括で隠したい」など、初心者がよく使う場面を整理しました。ポイントは Rows.Hidden = True を使うこと。解除は False に戻すだけです。
基本:行を非表示にする
Sub HideRow_Basic()
'3行目を非表示
Rows(3).Hidden = True
'2〜5行をまとめて非表示
Rows("2:5").Hidden = True
End Sub
VB- ポイント:
Hidden = True→ 非表示Hidden = False→ 再表示
選択範囲の行を非表示
Sub HideRow_Selection()
If TypeName(Selection) = "Range" Then
Selection.EntireRow.Hidden = True
End If
End Sub
VB- ポイント:
- 選択したセル範囲の「行全体」を非表示にできる。
EntireRowを付けることで、セル単位ではなく行単位で処理。
条件付きで非表示(例:金額が0の行)
Sub HideRow_ByCondition()
Dim last As Long, r As Long
last = Cells(Rows.Count, "E").End(xlUp).Row
For r = 2 To last
If Cells(r, "E").Value = 0 Then
Rows(r).Hidden = True
End If
Next
End Sub
VB- ポイント:
- ループで判定して、条件に合う行だけ非表示。
- 解除は
Hidden = Falseを同じように回せばOK。
最終行まで一括で非表示
Sub HideRow_ToLast()
Dim last As Long
last = Cells(Rows.Count, "A").End(xlUp).Row
Rows("2:" & last).Hidden = True
End Sub
VB- ポイント:
- データが毎回変わる表でも、最終行まで自動で範囲を指定できる。
フィルタ後の可視行だけ非表示
Sub HideRow_VisibleOnly()
Dim vis As Range
On Error Resume Next
Set vis = Range("A2:A200").SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not vis Is Nothing Then
vis.EntireRow.Hidden = True
End If
End Sub
VB- ポイント:
- フィルタで表示されている行だけを非表示にできる。
SpecialCells(xlCellTypeVisible)を使うのがコツ。
例題で練習
例題1:見出し行以外を全部非表示
Sub Example_HideExceptHeader()
Dim last As Long
last = Cells(Rows.Count, "A").End(xlUp).Row
Rows("2:" & last).Hidden = True
End Sub
VB例題2:選択範囲の行を非表示/再表示
Sub Example_ToggleSelection()
If TypeName(Selection) = "Range" Then
With Selection.EntireRow
.Hidden = Not .Hidden
End With
End If
End Sub
VB例題3:ステータス列(F列)が「完了」の行を非表示
Sub Example_HideCompleted()
Dim last As Long, r As Long
last = Cells(Rows.Count, "F").End(xlUp).Row
For r = 2 To last
If Cells(r, "F").Value = "完了" Then
Rows(r).Hidden = True
End If
Next
End Sub
VB実務の落とし穴と対策
- 非表示と削除の違い: Hidden は「隠すだけ」。データは残っている。削除と混同しない。
- 解除忘れ: 再表示は
Hidden = False。一括解除ならRows.Hidden = False。 - フィルタとの併用: フィルタで非表示になっている行と、Hidden で非表示にした行は別扱い。混乱しやすいので注意。
- 大量処理で遅い: 1行ずつループすると遅い。まとめて範囲指定して Hidden = True にすると高速。
