Developer

【ExcelVBA】配列とは
2021.06.21
Lv1

【ExcelVBA】配列とは

配列とは

以前の連載で説明した変数は値を入れたり、入れた値を取り出したりといったことができる
データを保存できる箱のようなものです。
計算結果などの値を変数内に保持しておくことで、その内容に応じて処理を変更したり、取り出して再利用したりすることが可能になります。
ただし変数に格納できる値は1つだけです。変数に値を格納すると前にあった値は上書きされてしまします。
では複数の値を格納したい場合はどうすればよいでしょうか。
例えば、複数人が参加するゲームでそれぞれ人の得点を格納することを考えてみましょう。
最初の人は90、次の人は81、その次の人は92といった値を格納したい場合、1つの変数では値を保持できません。
後ろの人の得点を代入した時点で、もともと入っていた値は上書きされるためもう取り出すことができなくなります。

Sub VBA基礎第21回_1()
    Dim score As Integer
    score = 90
    score = 81 'この時点で最初の90は上書きされてしまいます
    
End Sub

そこで次のように参加者の数だけ変数を用意すると一応全員の値を格納することができます。

Sub VBA基礎第21回_2()
    Dim score1 As Integer   '参加人数分宣言します
    Dim score2 As Integer
    Dim score3 As Integer
    
    score1 = 90
    score2 = 81
    score3 = 92
    

ただこのやり方の場合、参加者が100人いた場合は変数の宣言をまず100回行うことになりとても
煩わしいコードとなります。

こうした複数の値を保存したい場合に使用されるのが配列となります。

ただし、複数の値を保存することができるといっても、型が異なるものは通常保存できません。
例えば文字と数値を混ぜて格納するといったことはできません。
また同じ型のものであれば、様々な値を格納できますが、関連性のある値を格納する用途として使うことが多いです。
数値を入れるための配列であれば、数値なら格納できますが、中身に関連性がないと混乱のもととなります。
今回の例で言うとあくまで配列scoreには得点を入れるのであって、数値だからと言って年齢といったデータまで格納するといった使い方はできなくはないですが、やらない方が混乱しないと思います。
次に配列を使う際の宣言についてみていきましょう。

配列の宣言とデータへのアクセス

配列使用する際には、まずいくつの要素を格納する配列なのかを宣言します。
100個の値を格納するなら、宣言時に100個必要であることを指定します。
そしてそれぞれの値が格納される場所をインデックス番号(添え字ともいいます)というもので識別します。
それぞれの箱に番号がついているということになります。
この番号は指定がなければ0から始まります。
先ほどのscoreの例だと配列scoreのインデックス番号0には90が格納されているということになります。
宣言の構文を見てみましょう。

Dim 配列名(インデックス番号の上限) as 型

この宣言方法はインデックス番号が0から始まるということに注意してください。
10個の値を格納できる配列を用意する場合は0からなのでインデックス番号の上限は9となるため
以下のように宣言します。

Dim score(9) as Integer

先頭のインデックス番号を指定することもできます。

Dim 配列名(インデックス番号の最初の数字 to インデックス番号の上限) as 型

10個の値を格納できる配列でインデックス番号は1から始めたい場合は以下のようにします。

Dim score(1 to 10) as Integer

値を格納したり、取り出したりする場合は以下のようにします。例えばインデックス番号0の値を
メッセージボックスに表示する場合

MsgBox score(1)

このときインデックス番号の範囲外の値を指定しないように注意してください。

では最後に3人のゲームの得点を格納し、合計値を表示させるサンプルコードを見ていましょう。

Sub VBA基礎第21回_3()
    Dim score(2) As Integer
    score(0) = 90
    score(1) = 81
    score(2) = 92
    ' score(3) = 100 インデックス番号の範囲外なのでエラーとなります。
    
    MsgBox "合計は" & score(0) + score(1) + score(2)
  
End Sub

コメントを外すと以下のようなエラーが表示されます。

まとめ

今回は配列について紹介しました。変数が1つの箱だとしたら、配列は複数の箱が連なったもののようになります。
関連性のある複数の値を扱う時などによく使われます。
1つ1つの要素をインデックス番号で指定することで、格納されている値を操作します。
インデックス番号の範囲外を指定してしまうというミスはよくやってしまうので気をつけて下さい。

確認問題

以下の「○○〇」に当てはまる文言を解答してください。

・配列には複数の値を格納でき、1つ1つの要素を指定するには○○〇を使います。この○○〇の
範囲外を指定してしまうとエラーとなります。

答え


・配列には複数の値を格納でき、1つ1つの要素を指定するにはインデックス番号を使います。このインデックス番号の
範囲外を指定してしまうとエラーとなります。

次回は、「動的配列」です。

 
 

連載目次リンク

ExcelVBA 入門 連載目次