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
1

セル「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
2

列の幅を自動設定する

列の幅をセルの値に合わせて自動調整するには 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          ' シート全体の列の幅を自動調整
3

Range.Columns.AutoFit から自動調整したときは、その範囲内の値に合わせて自動調整します。

AutoFit で自動調整した後にセルの値が変更されても、列の幅は変わりません。行の高さを自動調整したときはその後でも自動調整されます。これは Excel の操作と同じです。

別シートの列の幅を取得または設定する

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

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

sheet1
' 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)