VBA配列のForループでLBoundとUBoundを使う理由と0/2ではダメな理由

Visual Basic

VBAで配列を扱う際、Forループで要素を順に処理する場合、LBoundとUBoundを使うことが推奨されます。これにより、配列の先頭と末尾のインデックスを自動的に取得でき、配列のサイズが変わっても柔軟に対応できます。本記事では、0や2の固定値ではなくLBoundとUBoundを使う理由を具体例とともに解説します。

配列のインデックスとLBound/UBound

VBAでは配列のインデックスは必ずしも0から始まるとは限りません。Option Base 1を使うと1から始まる配列も作れます。そのため、固定で0や2を指定すると、配列の始まりや終わりが変わったときに正しく処理できなくなります。

LBound(array)は配列の最小インデックス、UBound(array)は最大インデックスを返す関数です。これを使うと、配列のサイズやインデックス範囲に依存せずにループを安全に回せます。

具体例の解説

例として、次の配列を考えます:
Dim buf(2) As Integer
buf(0)=10, buf(1)=20, buf(2)=30

この場合、For i=0 To 2でも動作しますが、配列のサイズが変わるとコードを書き換える必要があります。一方、For i=LBound(buf) To UBound(buf)とすれば、配列のサイズに応じて自動的にループ範囲が決まります。

0や2を使うと起こる問題

配列のインデックスを固定で0や2と指定すると、配列を拡張したりOption Base 1を使用した場合に、範囲外アクセスのエラーが発生する可能性があります。また、他の配列に同じコードを流用する際も、都度インデックスを修正する必要があり、保守性が低くなります。

まとめ

VBAで配列をループ処理する際は、LBoundとUBoundを使うことで、配列サイズやインデックスの違いに柔軟に対応できます。0や2といった固定値を使うと、配列の変更に弱くなるため、LBoundとUBoundを利用するのが推奨されます。

コメント

タイトルとURLをコピーしました