ポイント
- わざとエラーを発生させ、次元数の判定に用いる。
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 ステートメント
以上です。