LBound(エルバウンド)
LBoundとは指定した配列の部屋の一番小さい部屋番号を数字で返してくれるものです。
配列は普通に作った場合の部屋番号は0から始まりますよね?普通の配列にLBoundを使用するともちろん0が返ってきます。
ですが、配列の作り方には種類があると配列の使い方でお勉強しましたね。
例えばh(1 To 10)のような場合ですね。
この場合はLBoundを使用した時に返ってくる値は1になります。
という事はh(4 To 5)この配列の場合は4が返ってきます。
使い方はLBound(配列の名前)で大丈夫なのですが、問題はこのLBoundというものは「値を返す」という所です。
つまり「値を返すための何か」が必要になるのです。プログラム中でいきなりLBound(配列)とやっても結果をどこに渡せばいいのかわからずにデバッグになってしまいます。
という事でLBoundを使用する時は変数に結果を入れたり、セルに結果を入れたり、メッセージボックスで表示したり、Debug.Printでイミディエイトに表示させたりしなければいけないのです。
UBound(ユーバウンド)
UBoundはLBoundの反対で配列の一番大きい部屋番号を返してくれるものです。
基本的にLBoundの反対になるのでこれも値を返す何かをしなければ使う事ができません。
UBoundで気を付けなければならないのはあくまでも返すのは最大の部屋番号という所です。
つまり、部屋数が0~10の配列をUBoundで結果を返すと部屋数は11個なのに10が返ってくるわけです。
部屋が何個あるのかを確認したい場合にはUBoundで返ってきた結果に⁺1しなければ部屋数は取得できないという事になりますね。
動的配列でUBoundの活用
LBoundは特殊な配列の作り方をした時によく使用しますが、UBoundは動的配列を生成する時によく使用します。
UBoundは配列の最大の部屋数を教えてくれるものなのでReDimする時に非常に便利なのです。
ループ処理で配列の部屋数を1個ずつ増やして行きたい場面が非常に多いので、UBoundをよく使います。
下図をご覧下さい。
loop処理で使うUBoundというサブプロシージャですね。
この処理の流れは
- hという動的配列を宣言
- ReDimでまず0番目の部屋を作成
- ループの中で配列の最大の部屋に値を入れる。→ h(UBound(h))
- 入れた値をDebug.Printでイミディエイトに表示
- ReDim Preserveで配列の値を保持しつつ次の部屋を作る。→ReDim Preservre h(Ubound(h) +1)
といった流れですね。カッコも増えてちょっとややこしく感じるかもしれませんが、ただ単純にhという配列の部屋数指定の代わりにUBoundを使用しただけです。
よくよく分解して考えてみれば簡単だと思います。
と、これでひとまず1次元の配列は扱えるようになったと思いますので次回は動的配列に入れたものをセルに一括で吐き出す処理をやってみましょう。