列の自動調整
「文字が見切れる」「余白がムダに広い」を一発で整える列幅の自動調整。初心者でも迷わない最短コードから、範囲指定、見出しだけ調整、最大幅の制限、結合セルの注意までをテンプレートでまとめます。基本は Columns(…).AutoFit または Range(…).EntireColumn.AutoFit です。
基本:列幅を内容に合わせて自動調整
Sub AutoFit_Columns_Basic()
'A列を自動調整
Columns("A").AutoFit
'B〜E列を自動調整
Columns("B:E").AutoFit
'シート全体の列を自動調整
Cells.EntireColumn.AutoFit
End Sub
VB- ポイント:
- Columns(“範囲”).AutoFit が最短。
- Range(“B2:E20”).AutoFit は列には効かないので、Range(…).EntireColumn.AutoFit を使います。
指定範囲の列だけ自動調整(表の列に限定)
Sub AutoFit_TableColumns()
'表範囲の列幅だけを調整
Range("B2:E20").EntireColumn.AutoFit
End Sub
VB- ポイント:
- 表以外に影響させないなら、表範囲の EntireColumn を使う。
- UsedRange や CurrentRegion と組み合わせると柔軟になります。
Sub AutoFit_CurrentRegion()
With Range("B2").CurrentRegion
.EntireColumn.AutoFit
End With
End Sub
VB見出しの長さに合わせて列幅を決める(本文が長すぎても広がりすぎない)
Sub AutoFit_ByHeaderOnly()
Dim header As Range
Set header = Range("B2:E2") '見出し行
header.EntireColumn.AutoFit 'まず自動調整
'最大幅の上限(長い本文で広がりすぎるのを抑制)
Dim c As Range
For Each c In header
If c.EntireColumn.ColumnWidth > 24 Then
c.EntireColumn.ColumnWidth = 24
End If
Next
End Sub
VB- ポイント:
- 自動調整後に上限をかけると、提出用の見た目が安定。
- 上限値は運用に合わせて調整(例:24〜32)。
列幅の上限・下限をまとめて制御(自動調整+制約)
Sub AutoFit_WithBounds()
Dim target As Range, col As Range
Set target = Columns("B:E")
target.AutoFit
For Each col In target.Columns
'下限(狭すぎる列を広げる)
If col.ColumnWidth < 10 Then col.ColumnWidth = 10
'上限(広がりすぎを抑える)
If col.ColumnWidth > 30 Then col.ColumnWidth = 30
Next
End Sub
VB- ポイント:
- 長文セル・改行・画像で極端な幅になるのを抑えられます。
- 下限を設けると数値列が詰まりすぎるのを回避。
結合セルがあるときの扱い(AutoFitが効かない場合の回避)
Sub AutoFit_WithMergedCells()
'結合セルがあるとAutoFitが効かないため、見出しのみ参照に自動調整
Dim headers As Range
Set headers = Range("B2:E2")
headers.EntireColumn.AutoFit
'必要に応じて見出しの文字数に応じた最低幅を指定
Dim c As Range
For Each c In headers
If c.EntireColumn.ColumnWidth < 12 Then
c.EntireColumn.ColumnWidth = 12
End If
Next
End Sub
VB- ポイント:
- 結合セルを含む列は AutoFit が期待通りに動かないことがあります。見出し行のみを基準に調整すると安定。
例題で練習
例題1:売上表の列幅を見出し基準で整え、最大幅を26に制限
Sub Example_SalesColumns()
Dim header As Range, c As Range
Set header = Range("B2:F2")
header.EntireColumn.AutoFit
For Each c In header
If c.EntireColumn.ColumnWidth > 26 Then
c.EntireColumn.ColumnWidth = 26
End If
Next
End Sub
VB例題2:対象シートの使用範囲だけ自動調整(他の余白は触らない)
Sub Example_UsedRangeAutoFit()
With ActiveSheet.UsedRange
.EntireColumn.AutoFit
End With
End Sub
VB例題3:コード列は固定幅、他は自動調整+下限10
Sub Example_CodeAndOthers()
Columns("A").ColumnWidth = 12 'コード列は固定
Dim target As Range, col As Range
Set target = Columns("B:E")
target.AutoFit
For Each col In target.Columns
If col.ColumnWidth < 10 Then col.ColumnWidth = 10
Next
End Sub
VB実務の落とし穴と対策
- Range.AutoFitの誤用: 列の自動調整は Columns(…).AutoFit か Range(…).EntireColumn.AutoFit を使う。Range(…).AutoFit は行高さ向けではない。
- 結合セルで効かない: 結合があると期待通りに調整されないことがある。見出し基準で列を整えるか、結合を避ける。
- 幅が広がりすぎる: 長文・改行・画像で極端に広がる。自動調整のあとに上限(ColumnWidth)を設定して抑制。
- フォント・表示形式の影響: フォント変更や数値表示形式(#,##0.00など)は見え方に影響。体裁変更後に AutoFit をかけ直すと良い。
- 大量シートで遅い: まとめて処理する際は必要範囲に限定し、Application.ScreenUpdating=False を併用すると体感が軽い。
