更新日:、 作成日:

VBA 行を非表示にする

はじめに

Excel VBA マクロで行を非表示する方法を紹介します。

Rows(2).Hidden または Range("A2").EntireRow.Hidden プロパティから、行「2」を非表示にできます。

Hidden プロパティから、行が非表示になっているか判定できます。

条件に一致するセルがある行を非表示にできます。

行を指定して取得するには「行を取得する」をご覧ください。
列を非表示にするには「列を非表示にする」をご覧ください。

行を非表示する

Rows の引数に行番号を指定すると、その行を非表示できます。

行「2」を非表示にするには Rows(2).Hidden = True を入力します。

Rows(2).Hidden = True
1

Range の引数にセル名を指定すると、そのセルを取得できます。EntireRow からその行を取得できます。

セル「A1」の行を非表示にするには Range("A1").EntireRow.Hidden = True を入力します。

Range("A1").EntireRow.Hidden = True

行を表示する

行を表示するには Hidden = False のように入力します。

Rows(2).Hidden = False
Range("A1").EntireRow.Hidden = False

複数行を非表示する

行の範囲「2 ~ 3」を非表示にするには Range("2:3").EntireRow.Hidden = True または Range("2:2", "3:3").EntireRow.Hidden = True を入力します。

' 2 ~ 3 行目を非表示
Rows("2:3").Hidden = True
Range("2:3").EntireRow.Hidden = True
Range("2:2", "3:3").EntireRow.Hidden = True
Range(Rows(2), Rows(3)).Hidden = True
Range("A2:A3").EntireRow.Hidden = True
2

Range("2:3") でも行「2 ~ 3」を取得できますが Range("2:3").Hidden = True と入力するとエラーになります。EntireRow を付ける必要があります。

行が非表示になっているか判定する

Hidden が True なら非表示になっています。

' 1 ~ 10 行目で非表示になっている行を取得する
Dim c As Range
Dim row As Long
For row = 1 To 10
    If Rows(row).Hidden = True Then
        ' 非表示になっている
        If c Is Nothing Then
            Set c = Rows(row)
        Else
            Set c = Union(Rows(row), c)
        End If
    End If
Next

Debug.Print(c.Address)

Union を使用すると、指定した 2 つのセルを組み合わせた範囲を取得できます。

非表示になっている行をすべて取得しています。

条件に一致するセルの行を非表示にする

Range.Find メソッドやセルをループして条件に一致するセルの EntireRow から行を取得して非表示にできます。

Find メソッドで検索するには「セルを検索する」をご覧ください。
複数の条件で検索するには「セルを複数条件で検索する」をご覧ください。

別シートの行を非表示する

シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。

Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

sheet1
' Sheet1 の行を非表示
Worksheets("Sheet1").Rows(1).Hidden = True
Worksheets(1).Rows(1).Hidden = True

' Sheet2 の行を非表示
Worksheets("Sheet2").Rows(1).Hidden = True
Worksheets(2).Rows(1).Hidden = True

Sheet1 に Rows を入力すると、自身のシートの行になります。自身を表す Me. が省略されています。

' どちらも同じコード
Dim r As Range
Set r = Rows(1)
Set r = Me.Rows(1)

標準モジュールに Rows を入力すると、開いているシートの行になります。アクティブシートを表す ActiveSheet. が省略されています。

' どちらも同じコード
Dim r As Range
Set r = Rows(1)
Set r = ActiveSheet.Rows(1)