ポイント
- わざとエラーを発生させ、次元数の判定に用いる。
On Error Resume Nextでエラー発生時もコードの実行を継続させる。UBound関数を用いて次元を判定する。
VBA コード
''' <summary>
''' 配列の次元数を返します。
''' </summary>
''' <param name="arr">配列</param>
''' <returns>配列の次元数</returns>
Public Function GetDimension(ByVal arr As Variant) As Long
Dim dimension As Long: dimension = 1
Dim forDecision As Long
' エラー発生まで次元を増やす
On Error Resume Next
Do While Err.Number = 0
forDecision = UBound(arr, dimension)
dimension = dimension + 1
Loop
' エラー発生次元 + 1 となっているため、2 を引いて次元数を調整
GetDimension = dimension - 2
End Function
Public Sub Test()
Debug.Print "配列の次元数を取得する。"
Dim arr1(2) As String
Debug.Print "次元数: " & GetDimension(arr1)
Dim arr2(2, 2) As String
Debug.Print "次元数: " & GetDimension(arr2)
Dim arr3(2, 2, 2) As String
Debug.Print "次元数: " & GetDimension(arr3)
End Sub
おわりに
本当は、エラー処理を判定に使いたくありませんでした><。。。本来の用途と異なった目的で使用するのは、バグの温床や、パフォーマンスへの悪影響や、メンテナンス性へのほころびへとつながりますもの。
とはいえ、他の実現方法がわかりませんでした><。もっとよい解決方法があるのかしら?
最後に、参考ページです。ありがとう存じます♪
- 配列の次元数を取得する:Excel VBA|即効テクニック|Excel VBAを学ぶならmoug
- 配列の次元を調べる関数 – My Life as a Mock Quant
- On Error ステートメント
以上です。
