【配列の次元数を調べるFunction】

配列の次元数を調べるFunction


1 閲覧対象者

配列の引数から、配列の次元数を取得するコードを知りたい方。

2 得られる効果

配列の次元数を取得するFunctionの作成方法が分かる。
配列の最大次元数がわかる(60次元){別に分らんでもいい。使わないw}。

3 設計

Subプロシージャから、Function「配列の次元数」を呼び出し、配列の次元数をイミディエイトウィンドウに出力する。

4 コードの解説

実際のコード↓↓

Option Explicit

Sub 配列の次元数を調べる()
    
    Dim arr1(1 To 3)
    Dim arr2(1 To 2, 1 To 4)
    Dim arr3(1 To 2, 1 To 4, 1 To 5)
    Dim x
    
    x = 配列の次元数(arr1)
    Debug.Print "arr1", x
    
    x = 配列の次元数(arr2)
    Debug.Print "arr2", x
    
    x = 配列の次元数(arr3)
    Debug.Print "arr3", x
    
End Sub
Function 配列の次元数(a_arr)

Rem 配列の次元数は、最大60次元
Rem 各次元の下限要素をLbound(a_arr,n)とすると、その次元が無ければ例外が発生する(on Error gotoでトラップする)
Rem つまり、1次元から61次元まで下限を取得し、エラーになれば終了。
    
    Dim x, i
    
    On Error GoTo Error_Handler00
    
    For i = 1 To 61         'to 61にしておけば、必ず例外が発生する。
        x = LBound(a_arr, i)
    Next
    
    Exit Function
    

Error_Handler00:
    'Fuctionの戻り値は関数名に代入する。
    配列の次元数 = i - 1
    
End Function

処理結果

f:id:bimori466:20210922100348p:plain

解説

プロシージャ「配列の次元数を調べる」の中で、単純に1次元配列~3次元配列(arr1~arr3)を作成しています。
各arrを、Function「配列の次元数」に渡して、次元数を調べます。
For文で「i」を回して、LBoundで次元があるか調べます。あればループ継続。無ければ、Error_Handler00に処理が飛びます。
配列の次元数は、「i - 1」となります。

ちなみに、For i = 1 To 61 とすることで、61次元目に到達すればError_Handler00に処理が飛びます(配列の限界値60に到達)。

5 感想

これで簡単に、配列の次元数を調べることができます。VBA使う仕事してますが、次元数を調べるコードを書いたことがなかったです。設計で決めるものかと思っていました。需要があるかどうかはわかりませんが、勉強になりました。


ではでは、このへんで(^^)/~~~