配列のインデックスを1から始めて扱いやすく

配列のインデックス(添字)は 0 から始まるのがプログラミングの常道ですが、1 から始まるほうが都合がよい場合があります。

オブジェクトのコレクション、Excelの行列番号やシート範囲を格納した配列など、強制的に1始まりになるものが多いからです。これらに 0始まりの配列を絡めると、常に+1-1を意識しなくてはならないのが厄介です。

配列のインデックスを 1始まりにすると、データ(n) は 配列(n) とし、Object.Count と Ubound(配列) を等しくできます。

Option Base 1 でデフォルト変更

Option Base 1 ステートメントは、Option Explicit と同じくモジュールの先頭に記述します。

これは、モジュール内での配列を1始まりにする宣言です。なお、この宣言がない場合は Option Base 0 を宣言したのと同じになります。

Option Explicit
Option Base 1

Sub 配列abc()

    Dim aryA, aryB, aryC
    
    ReDim aryA(3)
    aryA(1) = "東京"
    aryA(2) = "千葉"
    aryA(3) = "神奈川"
    
    aryB = Array("東京", "千葉", "神奈川")
    aryC = Split("無し/東京/千葉/神奈川", "/")

End Sub

配列の例

配列宣言でデフォルトの開始インデックスが 1 になる

開始インデックスを省略したときに1が設定されます。Dim aryA(3) は、Dim aryA(1 To 3) の意味になりインデックス 1~3の要素を持ちます。

Array 関数の開始インデックスが 1 になる

Array 関数では、値の代入時に開始インデックスを指定できません。必ず Option Base の指定に従うことになります。

Split関数の開始インデックスは 0 のまま

ここが要注意ポイントです。Option Base 1 を指定しても、Split関数で作られる配列は0始まりです。

筆者は上記サンプルのように、インデックス0にはダミーの値を入れて使ったりします。これにより、Split関数による配列を特別扱いするのを避けることができます。

 

自分流のコーディングスタイルに合わせて
ポイントは自分が考えやすい方を自分の流儀として定めてしまうことです。
Option Base 1のほうが好みなら、Option Explicit とともにすべてのモジュールの先頭にお約束のように記述しましょう。
ケースバイケースでの使い分けは、かえってややこしくなるのでお勧めしません。
タイトルとURLをコピーしました