和風スパゲティのレシピ

日本語でコーディングするExcelVBA

セルの文字配置(水平/垂直位置など)を設定する

セルの書式設定のうち、配置タブにある設定をVBAで行う方法を解説します。

水平/垂直方向の位置設定(左寄せ、上寄せなど)や、
文字の折り返し、縮小して全体表示、文字方向(縦書き)などが該当します。

文字配置に関するプロパティと設定値の一覧

セルの書式設定は以下の形式のコードで実行します。

' 基本形
設定するRangeオブジェクト.設定するプロパティ = 設定値

' 例:横位置(水平方向)を中央寄せにする
Range("A2:A10").HorizontalAlignment = xlCenter


配置タブにある書式設定とプロパティ/設定値の一覧は以下の通りです。
赤字がプロパティ青字が設定値

セルの書式設定:配置タブの各プロパティと設定値

' 横位置(水平方向)
対象Range.HorizontalAlignment = xlGeneral ' 標準(既定値)
対象Range.HorizontalAlignment = xlLeft ' 左詰め
対象Range.HorizontalAlignment = xlCenter ' 中央揃え
対象Range.HorizontalAlignment = xlRight ' 右詰め
対象Range.HorizontalAlignment = xlFill ' 繰り返し
対象Range.HorizontalAlignment = xlJustify ' 両端揃え
対象Range.HorizontalAlignment = xlCenterAcrossSelection ' 選択範囲内で中央
対象Range.HorizontalAlignment = xlDistributed ' 均等割り付け

' 縦位置(垂直方向)
対象Range.VerticalAlignment = xlTop ' 上詰め
対象Range.VerticalAlignment = xlCenter ' 中央揃え
対象Range.VerticalAlignment = xlBottom ' 下詰め
対象Range.VerticalAlignment = xlJustify ' 両端揃え
対象Range.VerticalAlignment = xlDistributed ' 均等割り付け

' インデント
対象Range.IndentLevel = 0 ' インデントなし
対象Range.IndentLevel = 1 ' インデント1
対象Range.IndentLevel = 対象Range.IndentLevel + 1 ' インデントを増やす

' 各種チェックボックス
対象Range.AddIndent = True ' 前後にスペースを入れる
対象Range.WrapText = True ' 折り返して全体を表示
対象Range.ShrinkToFit = True ' 縮小して全体を表示
対象Range.MergeCells = True ' セルの結合
    ' ※ 解除は = False

' 方向
対象Range.Orientation = xlHorizontal ' 水平方向(通常に戻す)
対象Range.Orientation = xlDownward ' 下向き(時計90°)
対象Range.Orientation = xlUpward ' 上向き(反時計90°)
対象Range.Orientation = xlVertical ' 縦書き
対象Range.Orientation = 45 ' 反時計方向45°
対象Range.Orientation = -45 ' 時計方向45°

' テキストを右から左へ ※アラビア語などの言語用(日本語使用不可)
対象Range.ReadingOrder = xlContext ' 最初の文字に依存
対象Range.ReadingOrder = xlLTR ' 左から右
対象Range.ReadingOrder = xlRTL ' 右から左

 

現在の設定を判定する場合

現在の書式設定を判定したい場合は、
Ifステートメントで上記の設定値をそのまま判定します。

' 例:縦書きのセルだけに処理をしたい場合
If 対象セル.Orientation = xlVertical Then
    処理内容
End If


なお、「xlVertical」などの値は組込みの定数で、
実際には数値が中に入っています。

Debug.Print 縦書きになっているセル.Orientation
' ↑-4128という数字が表示されます。

 

範囲に一括で設定する

対象のRangeオブジェクトには、単独セル、セル範囲、複数セルを指定できます。

書式設定を1セルずつやるのはあまり高速ではありませんので、
出来る限り一括で実行するようにしましょう。

' 1セルずつ中央寄せ
For R = 1 To 10000
    Cells(R, 1).HorizontalAlignment = xlCenter
Next
    ' ScreenUpdating = False 下でも約1秒(なしだと約4秒)

' 一括で設定
Range("A1:A10000").HorizontalAlignment = xlCenter
    ' 測定不能(0.01秒以下)


' 参考:値の代入
For R = 1 To 10000
    Cells(R, 1).Value = 1
Next
    ' 約0.3秒(書式設定は描画を止めても値設定の3倍ほど時間がかかることになります)

 

セルの結合について

セルの結合は、

対象Range.MergeCells = True

こちらのコードで行っていましたが、これは、

対象Range.Merge

こちらのコードでも実行できます。


同様に、セル結合の解除は

対象Range.UnMerge

でも実行ができます。


また、セルが結合されているかどうかはMergeCellsがTrueかどうかで判定できますが、加えて「結合されている範囲」を取得するMergeAreaプロパティも用意されいます。


一応「配置タブ」にあるためこの記事でも説明しましたが、
セルの結合についてはまた別に調べてみてください。