更新日:、 作成日:
VBA 列の幅を調整する
はじめに
Excel VBA マクロで列の幅を調整する方法を紹介します。
Columns(2).ColumnWidth または Range("B1").EntireColumn.ColumnWidth プロパティから、列「B」の幅を取得または設定できます。
AutoFit メソッドから、列の幅を自動調整できます。
列の幅を取得する
Columns の引数に列番号または列名を指定すると、その列の幅を取得できます。
列「B」の幅を取得するには Columns(2).Width または Columns("B").ColumnWidth を入力します。
Dim d As Double
d = Columns("B").Width
d = Columns(2).Width
d = Columns("B").ColumnWidth
d = Columns(2).ColumnWidth
Debug.Print(d)
Range の引数にセル名を指定すると、そのセルを取得できます。EntireColumn からその列を取得できます。
セル「A1」の列の幅を取得するには Range("A1").EntireColumn.Width または Range("A1").EntireColumn.ColumnWidth を入力します。
Dim d As Double
d = Range("A1").EntireColumn.Width
d = Range("A1").EntireColumn.ColumnWidth
Debug.Print(d)
- Width:ポイントの単位で取得します。行の高さを設定するのと同じ単位です。
- ColumnWidth:標準フォントの 1 文字の単位で取得します。これは Excel で幅を設定するのと同じ単位です。
複数列の幅を取得する
列の範囲「B ~ C」の幅を取得するには Range("B:C").Width または Range("B:B", "C:C").Width を入力します。
Width は列の範囲の幅の合計を取得します。非表示になっている列の幅は 0 です。
' B ~ C 列の幅の合計を取得
Dim d As Double
d = Range("B:C").Width
d = Range("B:B", "C:C").Width
d = Range(Columns(2), Columns(3)).Width
d = Range("B1:C1").EntireColumn.Width
Debug.Print(d)
ColumnWidth は、範囲内のすべての列の幅が同じときに 1 列分の幅を取得します。違う幅が含まれているときは Null になります。
Dim d As Double
d = Range("B:C").ColumnWidth ' B ~ C 列の幅が同じなら 1 列分の幅を取得
Debug.Print(d)
スポンサーリンク
列の幅を設定する
列「B」に幅を設定するには Columns(2).ColumnWidth = 20 を入力します。
Columns(2).ColumnWidth = 20
Columns("B").ColumnWidth = 20
セル「A1」の列に幅を設定するには Range("A1").EntireColumn.ColumnWidth = 20 を入力します。
Range("A1").EntireColumn.ColumnWidth = 20
Width は読み取り専用なので設定できません。
複数列の幅を設定する
複数列の幅をまとめて設定できます。
列の範囲「B ~ C」に幅を設定するには Range("B:C").ColumnWidth = 20 を入力します。
Range("B:C").ColumnWidth = 20
Range("B:B", "C:C").ColumnWidth = 20
Range(Columns(2), Columns(3)).ColumnWidth = 20
Range("B1:C1").EntireColumn.ColumnWidth = 20
列の幅を自動設定する
列の幅をセルの値に合わせて自動調整するには AutoFit メソッドを使用します。
列「B」の幅を自動設定するには Columns(2).AutoFit を入力します。
Columns(2).AutoFit ' B 列の幅を自動調整
Range("B:C").EntireColumn.AutoFit ' B ~ C 列の幅を自動調整
Range("B1:C3").EntireColumn.AutoFit ' B ~ C 列の幅を自動調整
Range("B1:C3").Columns.AutoFit ' B ~ C 列の幅をセル「B1 ~ C3」に合わせて自動調整
Cells.EntireColumn.AutoFit ' シート全体の列の幅を自動調整
Range.Columns.AutoFit から自動調整したときは、その範囲内の値に合わせて自動調整します。
AutoFit で自動調整した後にセルの値が変更されても、列の幅は変わりません。行の高さを自動調整したときはその後でも自動調整されます。これは Excel の操作と同じです。
別シートの列の幅を取得または設定する
シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。
Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。
' Sheet1 の列の幅を設定
Worksheets("Sheet1").Columns(1).ColumnWidth = 20
Worksheets(1).Columns(1).ColumnWidth = 20
' Sheet2 の列の幅を設定
Worksheets("Sheet2").Columns(1).ColumnWidth = 20
Worksheets(2).Columns(1).ColumnWidth = 20
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)
スポンサーリンク