Excel VBAで文字を中央揃えにしたいときはないでしょうか。
けど、そんな中で悩むことは、
・シート全体をまとめて中央揃えにする方法が知りたい
・結合セルだとうまく中央にならず、レイアウトが崩れる
・毎回手作業で配置を直すのが手間で、ミスが起きる
ですよね。
今回はそんなお悩みを解決する
についてまとめます!
完成イメージ
セルの文字や数字をきれいに中央へそろえたいとき、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行で済むのでカンタンですね。

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 | 結合セル全体 | 結合範囲にまとめて適用 |
横位置を中央にそろえるのは 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
毎回手で配置を直している方は、このマクロをボタンにしておくとラクです。
両方そろえたいときは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にしておけば、毎回手作業で配置を設定する手間がなくなり、レイアウトの修正も一瞬で終わります。

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














コメントを残す