こんにちは、わたあめです。今日はExcel VBAマクロで、セルの文字にインデント(余白みたいなもの、字下げとも言われます)を付けて、表を整えようと思います!
Excelで表を作って、文字を右または左揃えにした場合、表の枠線に文字がピッタリくっつきませんか?例えば、金額は右揃え、備考は左揃えにするなど、右揃えセルと左揃えセルが隣り合った場合、ちょっと窮屈な印象を与えてしまいます。
インデント設定を行う事で、表も綺麗に整った印象になります。今日はこのインデントを自動化(VBAマクロ)でどう書けば良いか、サンプルなど載せつつ解説します。それでは、いってみましょう!
手動でのインデント設定方法
VBAマクロを作成する前に、インデントとは何か?を手動で設定して理解しましょう。インデントを手動で設定する手順は、以下です。
- インデントを入れたい範囲をドロップ&ドラッグで選択
- 右クリック>[セルの書式設定]>[配置]タブ>[文字の配置]欄
- [インデント]をに値を入力
- [OK]ボタンをクリック
実際に右揃え・左揃えで設定したインデント"0"(デフォルト),"1","2"を設定してみると、以下画像のようになります。
このように、値が大きければ大きいほど枠線から離れていきます。
マクロでのインデント設定方法
手動でのインデント設定でインデントとは?のイメージがつかめたと思うので、次はVBAマクロで設定を自動化していきましょう。
基本構文
インデントを設定する場合、基本は以下の構文になります。
シート名 | Excelのシート名を入力。 Sheet1だったらSheets("Sheet1")になる。 |
---|---|
範囲 | 行列の範囲を設定。 A列全てだとRange("A")、A1~C4という範囲だとRange("A1:C4")という書き方になる。 |
値 | 0~15の整数値で指定。 |
サンプルコード
上記の基本構文だけでは、少し分かりにくいかもしれないので、サンプルコードをいくつか挙げておきます。
Sheets("Sheet1").Range("A1").IndentLevel = 1
これは、シート"Sheet1"のセルA1をインデント"1"設定するサンプルコードになります。
With Sheets("Sheet1").Range("A1")
.HorizontalAlignment = xlRight
.IndentLevel = 1
End With
こちらは、上記条件にプラスで右揃えしたい場合のサンプルコードです。Withステートメントを利用して、共通部分を2度書かずに済むように、まとめています。ちなみに、"xlRight"の部分を"xlCenter"すると中央揃え、"xlLeft"にすると左揃えになります。
Dim MaxRow As Integer
MaxRow = Sheets("Sheet1").Range("B1").End(xlDown).Row
With Sheets("Sheet1").Range("B2:B" & MaxRow)
.HorizontalAlignment = xlRight
.IndentLevel = 1
End With
最後は、1つのセルでなく、列に適用したい場合のサンプルコードになります。表の行数がその時々で増減する場合を想定して、表の最終行の値(MaxRowに値を入力)を取得し、その値を利用して適用する範囲を指定しています。
少し分かりやすいように、以下の表と上記マクロを例にして説明します。
MaxRowはセルB1を起点に、表のデータがある最後の行(緑枠、緑矢印のイメージ)を取得します。この時、MaxRowの値は"6"が代入されています。その後、価格部分のヘッダ以外の部分(B2からB6)を右揃えにしてインデント"1"を設定しているというコードになります。
さいごに
インデントについて、インデントのマクロのイメージは少しでも掴めたでしょうか?少しでもお役立ち出来ていれば幸いです。それでは、また!