スポンサーリンク
Excel VBAの配列では、
Dim arr(1 To 100 , 1 To 5)
など、要素数を決めてセットするわけだが、逆にその要素数(添字の上限・下限)を配列から取得することも当然できる。
それには、上限を取得するならUBound、下限を取得するならLBoundというものを使う。
これらは、UBound(arr, 1)のように書く。
という構成だ。
「次元」の方は省略することもできるが、2次元配列では省略するとややこしいので、明記するようにした方が良いだろう。
その「次元」は、2次元配列のarr(1 To 100 , 3 To 10)に対してなら、
次元=2 → 3 To 10 の方
だ。配列の添字は通常は0始まりだが、この「次元」は1始まりなのがまたややこしい。
その挙動をソースコードにまとめると、↓のような感じだ。
1 2 3 4 5 6 7 8 |
'次元1が、1 To 100 '次元2が、3 To 10 Dim arr(1 To 100, 3 To 10) Debug.Print UBound(arr, 1) '次元1の最大値100を返す Debug.Print UBound(arr, 2) '次元2の最大値10を返す Debug.Print LBound(arr, 1) '次元1の最小値1を返す Debug.Print LBound(arr, 2) '次元2の最小値3を返す |
私としては、改めてこうやって要素数を取得しなくても、処理中に要素数を把握するようにしている場合が多いので、あまりUBound・LBoundは使わない。
ただ、ループ処理などで、↓のような書き方が紹介されることがある。
1 2 3 4 5 6 7 8 9 |
Dim r As Long Dim c As Long For r = LBound(arr, 1) To UBound(arr, 1) '(行ごとの処理) For c = LBound(arr, 2) To UBound(arr, 2) '(列ごとの処理) Next c Next r |
こういう処理記述も私はほぼ採用しないが、好みによって使うと良いかと思う。
スポンサーリンク