更新日:、 作成日:

VBA 列を非表示にする

はじめに

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

Columns(2).Hidden または Range("B1").EntireColumn.Hidden プロパティから、列「B」を非表示にできます。

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

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

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

列を非表示する

Columns の引数に列番号または列名を指定すると、その列を非表示できます。

列「B」を非表示にするには Columns(2).Hidden = True または Columns("B").Hidden = True を入力します。

Columns(2).Hidden = True  ' B 列を非表示
Columns("B").Hidden = True
1

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

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

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

列を表示する

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

Columns(1).Hidden = False
Columns("A").Hidden = False
Range("A1").EntireColumn.Hidden = False

複数列を非表示する

列の範囲「B ~ C」を非表示するには Range("B:C").EntireColumn.Hidden = True または Range("B:B", "C:C").EntireColumn.Hidden = True を入力します。

' B ~ C 列を非表示
Columns("B:C").Hidden = True
Range("B:C").EntireColumn.Hidden = True
Range("B:B", "C:C").EntireColumn.Hidden = True
Range(Columns(2), Columns(3)).EntireColumn.Hidden = True
Range("B1:C1").EntireColumn.Hidden = True
2

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

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

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

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

Debug.Print(c.Address)

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

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

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

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

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

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

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

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

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

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

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

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

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

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