更新日:、 作成日:
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
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
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 から列を取得して非表示にできます。
別シートの列を非表示する
シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。
Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。
' 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)
スポンサーリンク