エクセルVBAで使うコードの備忘録。VBAで指定した配列の次元数を取得するコード。
UBound関数を使って次元数を取得する
UBound関数は配列の要素数を取得するための関数です(詳しくはこちらを参照)。この関数を使ってどのように配列の次元数を取得するのか。ポイントは「UBound関数は配列の次元を超える次元の要素数を取得しようとすると、存在しないためエラーを発生させる」というところです。
つまり、次元数を調べたい配列に対して、第一次元から順に次元数を上げてアクセスしていくとどこかで配列の次元数を超えてしまいます。次元数を超えた場合、要素は存在しないのでUBound関数で要素数を調べようとするとエラーになるということです。
つまり、エラーが発生した時に「次元数 – 1」が調べたい配列の次元ということになります。
サンプルコード
Public Sub getArrayDimension()
'--- 次元を調べたい配列 ---'
Dim var As Variant
'--- 三次元配列を例とする ---'
ReDim var(1 To 3, 1 To 5, 1 To 10)
'--- エラーが発生するまでループ ---'
Dim tmp As Long
Dim i As Long
On Error Resume Next
i = 1
Do While Err.Number = 0
i = i + 1
tmp = UBound(var, i)
Loop
On Error GoTo 0
'--- 次元数を取得 ---'
Dim n As Long
n = i - 1
End Sub