セル内に入力されたデータは、それが数値なら左詰、文字列なら右詰で表示されます。これが標準的な配置です。マクロからセル内の配置を設定する前に、そもそもExcelにはどんな配置設定が用意されているのか確認しましょう。[セルの書式設定]ダイアログボックスの[配置]タブをご覧ください。
非常に多くの設定項目が並んでいます。どの設定にどのプロパティを使うのかはマクロ記録でわかるのですが、このダイアログボックスでの操作を記録すると大量のコードが記録されます。そのコードを解析するのは大変なので、マクロ記録したコードがどの設定を表しているかを解説しますので参考にしてください。
Sub Macro1() With Selection .HorizontalAlignment = xlGeneral ''[横位置] .VerticalAlignment = xlCenter ''[縦位置] .WrapText = False ''[折り返して全体を表示する] .Orientation = 0 ''[方向]の角度 .AddIndent = False ''[前後にスペースを入れる] .IndentLevel = 0 ''[インデント]の数値 .ShrinkToFit = False ''[縮小して全体を表示する] .ReadingOrder = xlContext ''[文字の方向] .MergeCells = True ''[セルを結合する] End With End Sub
Selectionは選択されたセルですから、上で記録されたプロパティはすべてRangeオブジェクトのプロパティです。HorizontalAlignmentプロパティやVerticalAlignmentプロパティのように定数を指定するもの、WrapTextプロパティやMergeCellsプロパティのようにTrueまたはFalseを指定するもの、OrientationプロパティやIndentLevelプロパティのように数値を指定するものがあります。どのプロパティに何を設定するとどうなるか、それはご自身でご確認ください。
セルの結合について、少しだけ解説します。セルを結合するには、結合したいセル範囲のMergeCellsプロパティにTrueを設定します。次のコードは、セル範囲A1:C3を結合します。
Sub Sample1() Range("A1:C3").MergeCells = True End Sub
結合を解除するときは、結合したセル範囲または結合されている任意のセルのMergeCellsプロパティにFalseを設定します。セル範囲A1:C3が結合されているとき、次のコードは結合を解除します。
Sub Sample2() Range("A1").MergeCells = False End Sub
結合されているセルでは、左上のセルが基準セルになります。結合されている他のセルにアクティブセルを移動しようとしても、アクティブセルは基準セル(結合されているセル範囲の左上セル)になります。
Sub Sample3() Range("B2").Activate MsgBox ActiveCell.Address End Sub
上のコードでは、セルB2をActivateしてアクティブセルを移動していますが、実際のアクティブセルの番地は結合されているセル範囲の左上、セルA1となっています。
結合されているセルにデータを入力するときは、基準セルを指定しなければなりません。次のコードは、セル範囲A1:C3が結合されているとき、まずセルA1に100を入力します。次にセルB2に200と入力します。画面の表示に注目してください。最後に、セルB2に入力されているデータをMsgBox関数で画面に表示してみます。
Sub Sample4() Range("A1") = 100 Range("B2") = 200 MsgBox Range("B2").Value End Sub
セルB2に入力したはずの200が表示されません。試しにセルの結合を解除してみると、
セルB2には何も入力されていないのがわかります。セルを結合した場合、左上の基準セル以外のセルは「無いものとして扱われる」という感覚でしょうか。
なお、任意のセルが「結合されているかどうか」や「どのセル範囲が結合されているか」などを調べるテクニックは、VBA Tipsの「結合セルを調べる」をご覧ください。