カテゴリー
Microsoft

【Excel VBA】配列の次元数を取得する関数コード

ポイント

  • わざとエラーを発生させ、次元数の判定に用いる。
  • 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

おわりに

本当は、エラー処理を判定に使いたくありませんでした><。。。本来の用途と異なった目的で使用するのは、バグの温床や、パフォーマンスへの悪影響や、メンテナンス性へのほころびへとつながりますもの。

とはいえ、他の実現方法がわかりませんでした><。もっとよい解決方法があるのかしら?

最後に、参考ページです。ありがとう存じます♪

以上です。

コメントを残す