プチIT化

セルにインデントを付けて枠線から離すVBAマクロサンプル

こんにちは、わたあめです。今日はExcel VBAマクロで、セルの文字にインデント(余白みたいなもの、字下げとも言われます)を付けて、表を整えようと思います!

Excelで表を作って、文字を右または左揃えにした場合、表の枠線に文字がピッタリくっつきませんか?例えば、金額は右揃え、備考は左揃えにするなど、右揃えセルと左揃えセルが隣り合った場合、ちょっと窮屈な印象を与えてしまいます。

わたあめ
わたあめ
スペースで整えることもできるけど、イチイチ空白打つのも面倒だし、データとして良くないよね!

インデント設定を行う事で、表も綺麗に整った印象になります。今日はこのインデントを自動化(VBAマクロ)でどう書けば良いか、サンプルなど載せつつ解説します。それでは、いってみましょう!

手動でのインデント設定方法

VBAマクロを作成する前に、インデントとは何か?を手動で設定して理解しましょう。インデントを手動で設定する手順は、以下です。

  1. インデントを入れたい範囲をドロップ&ドラッグで選択
  2. 右クリック>[セルの書式設定]>[配置]タブ>[文字の配置]欄
  3. [インデント]をに値を入力
    "0"はインデントなしの枠線ピッタリ、値が大きければ大きいほど枠線から離れます。
  4. [OK]ボタンをクリック

実際に右揃え・左揃えで設定したインデント"0"(デフォルト),"1","2"を設定してみると、以下画像のようになります。

このように、値が大きければ大きいほど枠線から離れていきます。

わたあめ
わたあめ
インデントのイメージは付きましたでしょうか?

マクロでのインデント設定方法

手動でのインデント設定でインデントとは?のイメージがつかめたと思うので、次はVBAマクロで設定を自動化していきましょう。

基本構文

インデントを設定する場合、基本は以下の構文になります。

Sheets("シート名").Range("範囲").IndentLevel = 値
シート名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"を設定しているというコードになります。

さいごに

インデントについて、インデントのマクロのイメージは少しでも掴めたでしょうか?少しでもお役立ち出来ていれば幸いです。それでは、また!

flier(フライヤー)