VBAでワークシート関数 覚書

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