Excelで階層がある場合、第一階層をA列、第二階層をB列にというように、Columnをずらして表現することが多い。
同じセル内で、インデントを用いて階層を表しているCaseがあった。
しかも、インデントだけではなく、先頭スペースでも階層を表していた。
その行の階層を表す関数を作ってみた。
その行を表すのがよくわからなかったが、ワークシート関数のRow()を用いることにした。
=dispIndent(ROW())
VBAでは、
Public Function dispIndent(vRow As Integer) As String
Dim ws As WorksheetFunction
Dim re As New RegExp
re.Pattern = "(^( | ))"
re.Global = False
Dim existSpace As Integer
existSpace = IIf(re.Test(Cells(vRow, 2)), 1, 0)
dispIndent = Cells(vRow, 2).IndentLevel + existSpace
End Function
正規表現(よくわからないが)で先頭スペース(全角・半角)を判断した。
そのため、参照設定で、Microsoft VBScript Regular Expressions 5.5を設定している。
インデントはCellのIndentLevelプロパティで取得できた。
参照設定を使用しない場合。
Public Function dispIndent(vRow As Integer) As String
Dim ws As WorksheetFunction
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "(^( | ))"
re.Global = False
Dim existSpace As Integer
existSpace = IIf(re.Test(Cells(vRow, 2)), 1, 0)
dispIndent = Cells(vRow, 2).IndentLevel + existSpace
End Function