インデント機能の問題点
インデント機能には使い勝手の点で2つの問題があります。
1つは、何段階インデントされているのかが画面上では分からない点です。セルの書式設定ダイアログを見なければ分かりません。これは手間が掛かります。
もう1つは、これが致命的なのですが、インデントなのか空白スペースを埋められているのかが判別できない点です。たとえば以下の画像はインデントとスペース埋めを混在させているのですが、どのセルにインデントが設定されているのかが分かりません。
セルの文字列の左にスペースを埋めて体裁を整えている資料を見たり、実際に作ったことがある方は結構いるのではないかと思います。
そういう資料の中にインデントで体裁を入れている部分があると、どこがインデントなのかお手上げです。
ただ、スペース埋めがされている部分の判別方法はあります。対象のセル範囲を選択+コピーして、メモ帳やテキストエディタに貼り付けると、インデントしか設定されていない部分には文字の左側にはスペースが無いため、文字の左側にスペース埋めがある行が、スペース埋めされているセルだと判断できます。
上の画像では1,5,8,11行目以外はスペース埋めがあると判断できます。ただし、インデントがあるかどうかは判別できません。
私自身もこのような使い勝手の悪さがあるためインデント機能は使いません。ただ、自分が使わないと決めていても他の方が作った資料を見たときに困るのではやはり同じことになります。
そこで、インデントを使っている個所とその階層を判別するマクロを後述しています。
Excelでの文字列のインデントの設定
セルの文字のインデントの設定はExcelの操作ではホームタブ→配置 のインデントとインデント解除で設定します。どちらも1ずつ設定と解除が行われます。
また、セル右クリック→セルの書式設定→配置タブ→インデント、で設定することも出来ます。
VBAでも同様の設定を行うことが出来ます。
セルの書式設定とプロパティの関係が以下の図になります。
ここでは図の黄色部分のインデントを設定するIndentLevelプロパティについて説明します。
構文
1 |
Rangeオブジェクト.IndentLevel |
Rangeオブジェクトにはセル範囲を指定します。
IndentLevelプロパティは取得と設定を行うことが出来ます。
取得はインデント段階数をLong型で返却されます。
設定は0から250の整数で行います。0が既定値でインデントされていないことを示します。そのため、インデントを全解除する場合は0を設定します。
設定値が範囲外(0未満、251以上)の場合はエラー1004が発生します。
サンプルコード
このマクロは選択範囲の各セルにインデントがあるかどうか、そしてインデントがあった場合は何段階なのかを判別します。判別結果はイミディエイトウィンドウに出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Sub IndentLevelExistCheck() Dim r As Range '// セル Dim i '// IndentLevel値 Dim s '// 出力文字列 '// 選択範囲をループして各セルで処理 For Each r In Selection '// インデントを取得 i = r.IndentLevel '// 出力文字列にセル位置を設定 s = r.Address(False, False) & " : " '// IndentLevelが0の場合(未インデントの場合) If (i = 0) Then s = s & "インデントなし" '// インデントされている場合 Else s = s & "インデントあり=" & i End If '// 出力 Debug.Print s Next End Sub |
実行結果
1 2 3 4 5 6 7 8 9 10 11 |
A1 : インデントなし A2 : インデントなし A3 : インデントなし A4 : インデントなし A5 : インデントあり=1 A6 : インデントあり=1 A7 : インデントあり=1 A8 : インデントあり=2 A9 : インデントあり=2 A10 : インデントあり=2 A11 : インデントあり=3 |