Excel VBAで文字を中央揃えにする方法!シート全体も!

Excel VBAで文字を中央揃えにする方法!シート全体も!
Excel VBAで文字を中央揃えにしたいときはないでしょうか。

けど、そんな中で悩むことは、

・中央揃えにするコードの書き方がわからない
・シート全体をまとめて中央揃えにする方法が知りたい
・結合セルだとうまく中央にならず、レイアウトが崩れる
・毎回手作業で配置を直すのが手間で、ミスが起きる

ですよね。

今回はそんなお悩みを解決する

・Excel VBAで文字を中央揃えにする方法(HorizontalAlignment / VerticalAlignment)

についてまとめます!

完成イメージ

セルの文字や数字をきれいに中央へそろえたいとき、1つずつ手作業で設定するのは手間がかかります。
今回は
・VBAでセルの文字を中央揃えにする方法(HorizontalAlignment = xlCenter)
をゴールにします。
横位置だけでなく、縦位置・シート全体・ブックの全シートまで、まとめて中央揃えにできるようになります。

完成イメージ
上の画像が完成形です。見出しも数値もセルの中央にそろい、表全体がバランスよく整っています。

なお、定数(xlCenter など)が使えないときの対処や、結合セルで中央にならないときの解決法(トラブルシュート)もあわせてご紹介します。

STEP1. 元データを用意する

まずは中央揃えを試すための売上表を用意します。
A列が項目、B列が数量、C列が単価、D列が金額です。
1行目はタイトル行、2行目は見出し行、3行目から8件のデータが入っています。
初期状態では、文字は左寄せ、数値は右寄せになっています。
この「そろっていない状態」から、VBAで中央揃えに変えていきましょう。
中央揃え前の売上表(左寄せ)

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。

商品別 売上集計
項目 数量 単価 金額
ノートPC 3 128000
モニター 5 32000
キーボード 12 4800
マウス 20 2200
プリンタ 4 29800
タブレット 7 58000
ヘッドセット 9 8900
外付けHDD 6 12000
合計

※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。

STEP2. 横位置を中央揃えにする

もっとも基本のコードが HorizontalAlignment = xlCenter です。
HorizontalAlignment は「横方向の配置」を決めるプロパティです。
標準モジュールに次のコードを貼り付けて実行します。

Sub CenterAlign()
    Range("A1:D11").HorizontalAlignment = xlCenter
End Sub

実行すると、A1:D11の文字と数値がすべて横方向の中央にそろいました。
たった1行で済むのでカンタンですね。
Rangeを中央揃えにした表

STEP3. 特定の列だけ・選択範囲だけを中央揃えにする

表全体ではなく、決まった列だけを中央揃えにしたいこともあります。
その場合は、列や範囲をピンポイントで指定します。
次のコードは、C列とD列(単価・金額)だけを中央揃えにします。

Sub CenterColumn()
    Range("C:D").HorizontalAlignment = xlCenter
End Sub

マウスで選んだ範囲に適用したいときは Selection を使います。

Sub CenterSelection()
    Selection.HorizontalAlignment = xlCenter
End Sub

行や範囲を選んでから実行すれば、その選択範囲だけが中央揃えになります。
画像では、A列は左寄せのまま、数量・単価・金額の列だけが中央にそろいました。
特定の列だけ中央揃えにした表

STEP4. 縦位置も中央揃えにする

横位置だけでなく、セルの高さ方向の中央にそろえたいときは VerticalAlignment を使います。
値には xlCenter を指定します。

Sub CenterVertical()
    Range("A1:D11").VerticalAlignment = xlCenter
    Rows("2:11").RowHeight = 40
End Sub

行の高さを広げると、文字が上下の中央にそろっているのが分かりやすくなります。
行の挿入やレイアウト変更で行が高くなっても、文字が上に寄らず中央に表示されます。
縦位置も中央揃えにした表

STEP5. 結合セルと中央揃えを組み合わせる

タイトル行のようにセルを結合している場合も、中央揃えはそのまま使えます。
ポイントは、結合セルの配置は左上のセルに対して設定されることです。
結合範囲にまとめて設定するなら MergeArea を使うと確実です。

Sub CenterMerged()
    With Range("A1:D1").MergeArea
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
End Sub

結合せずに中央に見せたいときは、Excelの「選択範囲内で中央」が使えます。
VBAでは HorizontalAlignment = 7(xlCenterAcrossSelection に相当)を指定します。
結合セル特有のつまずきは、後のトラブルシュートでまとめています。
結合セルと中央揃え

STEP6. シート全体を中央揃えにする

表全体ではなく、シートのすべてのセルを中央揃えにしたい場合は Cells を使います。
Cells はシート全体を指すので、あとから入力するセルにも設定が効きます。

Sub CenterSheet()
    Cells.HorizontalAlignment = xlCenter
End Sub

すでに使っている範囲だけを対象にしたいときは UsedRange を指定します。
新しく入力するセルまで中央にしたいなら Cells、既存の表だけなら UsedRange、と使い分けましょう。
シート全体を中央揃えにした状態

STEP7. ブックの全シートにまとめて適用する

複数のシートを同じレイアウトにそろえたいときは、Worksheets をループさせます。
シートの数だけ同じコードを書く必要はありません。

Sub CenterAllSheets()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ws.Cells.HorizontalAlignment = xlCenter
        ws.Cells.VerticalAlignment = xlCenter
    Next ws
End Sub

1つずつ手作業で設定する手間がなくなり、シートが多いブックほど効果があります。

STEP8. 元に戻す(xlLeft / xlRight)

中央揃えを解除して元に戻すときも、同じプロパティに別の定数を指定するだけです。
左寄せは xlLeft、右寄せは xlRight です。

Sub ResetAlign()
    Range("A1:A11").HorizontalAlignment = xlLeft
    Range("B2:D11").HorizontalAlignment = xlRight
End Sub

文字は左寄せ、数値は右寄せに戻すと、桁がそろって読みやすくなります。
数値まで中央揃えにすると、桁数がバラバラに見えやすくなる点に注意しましょう。
中央揃えを元に戻した表

中央揃えで使うプロパティと定数の比較

実際によく使うプロパティと指定方法を表にまとめました。
「何を指定すればいいか」で迷ったら、この表に戻ってください。

使うもの 役割 指定できる値の例
HorizontalAlignment 横方向の配置 xlLeft / xlCenter / xlRight
VerticalAlignment 縦方向の配置 xlTop / xlCenter / xlBottom
Selection 選択中の範囲 マウスで選んだセルに適用
Cells シート全体 あとから入力するセルにも適用
MergeArea 結合セル全体 結合範囲にまとめて適用
POINT

横位置を中央にそろえるのは HorizontalAlignment = xlCenter。
縦位置は別のプロパティで VerticalAlignment = xlCenter です。
シート全体なら Cells.HorizontalAlignment = xlCenter、全シートなら Worksheets をループ、と覚えてしまいましょう。

中央揃えをまとめて行うVBA

ここまでの内容を1つにまとめたコードです。
ボタンに登録しておけば、クリック1つでブック全体の表を整えられます。

Sub AlignCenterAll()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        With ws.Cells
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
        End With
    Next ws
End Sub

毎回手で配置を直している方は、このマクロをボタンにしておくとラクです。

タカヒロ

タカヒロ
横位置は HorizontalAlignment、縦位置は VerticalAlignment と、別々のプロパティになっています。
両方そろえたいときは2行書くだけなので、カンタンですね。

うまくいかないときの対処法(トラブルシュート)

実際に試すと、思ったように動かないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。

症状 原因 対処
xlCenter がエラーになる 参照設定でExcelのオブジェクトライブラリが外れている VBEの「ツール → 参照設定」で Microsoft Excel xx.x Object Library にチェックを入れる
定数名が使えない環境がある 参照設定の状態によって定数が解決できない 数値で -4108(xlCenter)を直接書く。または Const XL_CENTER = -4108 と自分で定義する
結合セルで中央にならない 結合前に設定した配置が残っている/左上セル以外を指定している MergeArea に対して設定し直す。結合を解除して設定し、再結合してもよい
シート全体に効かない シートが保護されている/UsedRange にしか設定していない シート保護を解除する。Cells を使う(UsedRange は使用済み範囲のみ)
数値が意図せず左右に寄る 数値セルは既定で右寄せになる 中央にしたい範囲へ HorizontalAlignment = xlCenter を明示的に設定する

機能の説明(配置・HorizontalAlignment)

HorizontalAlignment(横位置の配置)

書式 Range.HorizontalAlignment = 定数
できること セルの横方向の配置を決めます。中央揃え・左寄せ・右寄せを指定できます。
戻り値 設定値(Long)
こんなときに 文字や数値を左右の中央にそろえたいとき。
注意 数値セルは既定で右寄せです。中央にするには明示的に指定します。

VerticalAlignment(縦位置の配置)

書式 Range.VerticalAlignment = 定数
できること セルの縦方向の配置を決めます。
戻り値 設定値(Long)
こんなときに 行の高さが高いとき、文字を上下の中央にそろえたいとき。
注意 横位置とは別のプロパティです。両方そろえるには2行書きます。

配置の定数値一覧

定数 値 意味
xlLeft -4131 左寄せ
xlCenter -4108 中央揃え
xlRight -4152 右寄せ
xlTop -4160 上寄せ(縦)
xlBottom -4107 下寄せ(縦)
xlJustify -4130 両端揃え
xlGeneral -4105 標準(既定)

定数が使えない環境では、値でそのまま書くこともできます(例:Range(“A1”).HorizontalAlignment = -4108)。
ただし -4108 だけでは意味が分かりにくいので、通常は定数名を使うのがおすすめです。

Range("A1:D11").HorizontalAlignment = xlCenter   ' 中央揃え

完成

見出しも数値もセルの中央にそろい、表全体がすっきり整いました。
思ったとおりに動きましたか?
VBAにしておけば、毎回手作業で配置を設定する手間がなくなり、レイアウトの修正も一瞬で終わります。
中央揃えが完成した表

さいごに

いかがでしょうか。

今回は、

・Excel VBAで文字を中央揃えにする方法(HorizontalAlignment / VerticalAlignment)

についてまとめました。

まずは今回のサンプル表で、ぜひ一度試してみてください。
横位置は HorizontalAlignment、縦位置は VerticalAlignment、シート全体なら Cells と覚えておくと、レイアウト調整がぐっとラクになりますよ。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。

ぜひ試してみてください。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image