【VBAスタンダード対策】下限と上限を指定する配列宣言の構造を攻略!
VBAでは Dim 配列名(下限 To 上限) という形式で、インデックスの開始番号と終了番号を自由に指定できます。この宣言方法を使うことで、「0番目問題」を回避し、データの構造を直感的に表現できるようになります。
1. 問題:指定された範囲から要素数を導き出す
【 問題 】 下記のように宣言された配列 Score に格納できる「要素の数」として正しいものはどれでしょうか?
Dim Score(10 To 20) As Integer
① 10個
② 11個
③ 20個
④ 21個
2. 正解:要素数の計算に関する正解
正解: ② 11個
3. 解説:「上限 - 下限 + 1」の公式
配列の要素数を数えるとき、単純に「20 - 10 = 10個」と考えてしまうのが最も多いミスです。開始番号(下限)もカウントに含める必要があるため、構造的に必ず 「+ 1」 を忘れてはいけません。
[ 配列のインデックス構造 ]
Dim Score(10 To 20)
・Score(10) ← 1つ目
・Score(11) ← 2つ目
...
・Score(20) ← 11つ目
★ 理系NEOな計算式:
要素数 = 上限(20) - 下限(10) + 1 = 11
[ この宣言構造のメリット ]
★ 意味の明確化:例えば出席番号が1番から始まるなら
★ オフセットの排除:他言語のように「n番目のデータは n-1 のインデックス」という引き算を頭の中でする必要がなくなり、可読性が劇的に向上します。
Dim Score(10 To 20)
・Score(10) ← 1つ目
・Score(11) ← 2つ目
...
・Score(20) ← 11つ目
★ 理系NEOな計算式:
要素数 = 上限(20) - 下限(10) + 1 = 11
[ この宣言構造のメリット ]
★ 意味の明確化:例えば出席番号が1番から始まるなら
(1 To 30) と書くことで、プログラムと現実の数字を一致させ、0番目の誤使用を防げます。★ オフセットの排除:他言語のように「n番目のデータは n-1 のインデックス」という引き算を頭の中でする必要がなくなり、可読性が劇的に向上します。
1. ここが試験に出る!: 試験では LBound (下限を返す関数) と UBound (上限を返す関数) を使ったループ For i = LBound(Score) To UBound(Score) が頻出します。このループが「何回回るか」を答える際、この +1 の構造が鍵を握ります。
2. エンジニアの視点: Java 17などの現代的な言語では下限は常に0と決まっていますが、VBAのように「下限を自由に決められる」構造は、古い会計システムや科学技術計算のロジックを移植する際に非常に強力な武器になります。ただし、混乱を避けるためにプロジェクト内では「常に0から」か「常に1から」か、ルールを統一しておくのがプロの設計です。
4. まとめ
「配列のサイズは、引き算に1を足したもの」。このシンプルな構造ルールを脳内にインストールすれば、どんな範囲指定が来ても迷うことはありません。下限と上限を明示する To の使いこなしこそ、配列操作の精度を高める「構造化プログラミング」への第一歩なのです。
PR