📊 Excel VBA Top100
🎨

SetColumnWidth

書式設定

選択列の幅を指定した値に設定します

選択した列または指定した列の幅を、文字数や数値(ポイント)で正確に設定するマクロです。Excelの列幅はドラッグで調整できますが、正確な数値での設定は「列の幅」ダイアログを使う必要があります。このマクロでは複数列に同じ幅を一括設定したり、列ごとに異なる幅を一度に設定したりする処理を自動化できます。帳票やフォームで列幅を厳密に管理したい場合に特に有効です。内部ではColumns(n).ColumnWidthプロパティに数値を直接代入しており、AutoFitColumnsのような内容依存の自動調整とは異なり常に同じ幅を再現できます。印刷レイアウトや帳票のように厳密な幅管理が求められる場面で特に有効です。AutoFitColumnsで内容に合わせた後、特定列だけ本マクロで固定するという組み合わせもよく使われます。

SetColumnWidth デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 対象列を選択してから SetColumnWidth を実行します

🎯 活用シーン

  • ✓入力フォームや帳票で特定の列幅を厳密に管理して、印刷時にレイアウトが崩れないよう固定したいとき
  • ✓複数シートにわたる一覧表で同じ列に同じ幅を設定して、ブック全体のレイアウトを統一したいとき
  • ✓A4用紙に収まる幅になるよう複数列の幅をまとめて調整して、印刷範囲を最適化したいとき
  • ✓社内共通の帳票フォーマットで列幅を固定し、誰が編集しても崩れない仕組みを作りたいとき
  • ✓A4サイズに収める必要がある提出書類で、列幅を厳密に調整して印刷レイアウトを最適化したいとき

💡 実装のヒント

  • ▸列幅の単位はExcelの「標準フォント1文字の幅」が基準になります。数値で8.38を設定すると概ね1.5cmに相当します。
  • ▸印刷用の帳票で特定の列幅を維持したい場合は、このマクロをボタンに割り当てておくと、誤って列幅を変更してしまった後でも即座に正しい幅に戻せます。
  • ▸AutoFitColumnsと組み合わせて使うと、まず自動調整した後に特定の列だけ固定幅に設定する処理が実現できます。
  • ▸複数列に異なる幅を一括設定したい場合は、列番号と幅のペアを配列にしてループ処理すると効率的です。
  • ▸印刷プレビューで幅がずれていないか確認してから帳票として確定させることをお勧めします。

💻 VBAコード

' SetColumnWidth
' -----------------
' Macro Name: SetColumnWidth
' Description: 選択列の幅を指定した値に設定します
' Parameters: なし
' Returns: なし
' Usage: 対象列を選択してから SetColumnWidth を実行します
' -----------------

Sub SetColumnWidth()
    On Error GoTo ErrorHandler

    Dim rng As Range
    Dim widthStr As String

    If TypeName(Selection) <> "Range" Then
        MsgBox "列を選択してから実行してください", vbCritical, "エラー"
        Exit Sub
    End If

    Set rng = Selection

    widthStr = InputBox("列幅を入力してください(文字数単位)", "列幅", "15")
    If widthStr = "" Then Exit Sub
    If Not IsNumeric(widthStr) Then
        MsgBox "数値を入力してください", vbCritical, "エラー"
        Exit Sub
    End If

    rng.EntireColumn.ColumnWidth = CDbl(widthStr)

    MsgBox "列幅を " & widthStr & " に設定しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub