セルの書式設定のうち、配置タブにある設定を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プロパティも用意されいます。
一応「配置タブ」にあるためこの記事でも説明しましたが、
セルの結合についてはまた別に調べてみてください。