Excel VBA 逆引き集 | 列の自動調整

Excel VBA
スポンサーリンク

列の自動調整

「文字が見切れる」「余白がムダに広い」を一発で整える列幅の自動調整。初心者でも迷わない最短コードから、範囲指定、見出しだけ調整、最大幅の制限、結合セルの注意までをテンプレートでまとめます。基本は 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 を併用すると体感が軽い。
タイトルとURLをコピーしました