VBAの配列

投稿日: 2024年5月20日

Excel VBAで配列を使用する方法について説明します。配列は複数の値を一つの変数に格納するためのデータ構造です。

分かりやすく日常にある電車に例えると

配列は、同じ種類のデータを連続して保存するためのものです。これを電車に例えると、配列は電車全体に相当します。電車が複数の車両を連結しているように、配列も複数のデータを順番に並べて保持します。

インデックス = 車両番号

配列の要素には「インデックス」という番号が付いています。これは車両番号のようなものです。電車の1号車、2号車といったように、配列の要素にも1番目、2番目、3番目と番号が振られています

配列の宣言を電車に例える

配列を宣言を電車にすると、電車は5両編成で、車両(配列の要素)には乗客(データ)が乗ります。
宣言をするときは変数名の後にカッコの中に最初の数と何個までの数を指定します。
Dim 変数名(下限値 To 上限値) As データ型

Dim myTrain(1 To 5) As Integer

この宣言では1両目から5両目までを指定しています。

配列への値の代入を電車に例える

各車両に乗客(データ)を乗せることは、配列に値を代入することに相当します。

myTrain(1) = 10
myTrain(2) = 20
myTrain(3) = 30
myTrain(4) = 40
myTrain(5) = 50

これは、1両目の車両に10人、2両目に20人、3両目に30人、4両目に40人、5両目に50人の乗客を乗せるようなものです。

例えば3両目に何人乗っているかを確認します。

Sub Example()
    Dim myTrain(1 To 5) As Integer
    
    myTrain(1) = 10
    myTrain(2) = 20
    myTrain(3) = 30
    myTrain(4) = 40
    myTrain(5) = 50
    
    MsgBox myTrain(3)
End Sub

このコードを実行するとメッセージボックスに30が表示されます。

配列の要素を使った操作

配列の要素を使って計算や他の操作を行うこともできます。例えば、myTrain(1)の値を他の変数に代入して計算します。

Sub Example()
    Dim myTrain(1 To 5) As Integer
    Dim result As Integer
    
    myTrain(1) = 10
    myTrain(2) = 20
    myTrain(3) = 30
    myTrain(4) = 40
    myTrain(5) = 50
    
    ' myTrain(1)の値を使って計算
    result = myTrain(1) * 2  ' myTrain(1)の値を2倍にする
    MsgBox result
End Sub

「result = myTrain(1) * 2」というように演算の他、「result = myTrain(1) + myTrain(2)」このように配列同士でも計算ができます。

VBAの配列は何に利用できるか?

Excel VBAの配列は、データを効率的に管理および操作するために使用されます。具体的には、次のような内容で配列を利用できます。

大量のデータの格納

配列は、複数の関連するデータを一つの変数にまとめて格納するのに適しています。例えば、あるクラスの全生徒の点数を管理する場合

Sub StoreStudentScores()
    Dim scores(1 To 30) As Integer
    scores(1) = 85
    scores(2) = 90
    ' 以下略
End Sub

データの一括処理

配列を使用すると、ループを使って大量のデータを一括で処理することができます。例えば、全ての点数に10点を加算する場合

Sub IncreaseScores()
    Dim scores(1 To 5) As Integer
    Dim i As Integer
    
    ' 配列に値を代入
    For i = 1 To 5
        scores(i) = i * 10
    Next i
    
    ' 点数に10点を加算
    For i = 1 To 5
        scores(i) = scores(i) + 10
    Next i
End Sub

ここにある「For」は繰り返しを意味します。Forについては別のページで説明します。

このほかにもExcelシートのセルの列の計算などにも使えます。

2次元配列

2次元配列は、行と列の2つの次元を持つ配列で、マトリックスや表形式のデータを格納するのに適しています。イメージはExcelのシートをイメージしてもらえると分かりやすいと思います。

2次元配列の宣言

2次元配列を宣言するには、Dimステートメントを使用して、行と列の数を指定します。

Dim myArray(1 To 3, 1 To 2) As Integer

上記の例では、3行2列の整数型の2次元配列を宣言しています。

2次元配列への値の代入

2次元配列に値を代入するには、行と列のインデックスを指定します。

myArray(1, 1) = 10
myArray(1, 2) = 20
myArray(2, 1) = 30
myArray(2, 2) = 40
myArray(3, 1) = 50
myArray(3, 2) = 60

2次元配列の要素を取り出す。

2次元配列の要素にアクセスするには、行と列のインデックスを指定します。例えば、myArray(2, 1)の値をメッセージボックスに表示するには、次のようにします

MsgBox "配列の値、 myArray(2, 1) : " & myArray(2, 1)

2次元配列の使用例

以下は、2次元配列を使用して行列の足し算を行い、その結果を表示する例です。

Sub MatrixAddition()
    Dim matrix1(1 To 2, 1 To 2) As Integer
    Dim matrix2(1 To 2, 1 To 2) As Integer
    Dim result(1 To 2, 1 To 2) As Integer
    Dim i As Integer, j As Integer
    
    ' 行列1の値を代入
    matrix1(1, 1) = 1
    matrix1(1, 2) = 2
    matrix1(2, 1) = 3
    matrix1(2, 2) = 4
    
    ' 行列2の値を代入
    matrix2(1, 1) = 5
    matrix2(1, 2) = 6
    matrix2(2, 1) = 7
    matrix2(2, 2) = 8
    
    ' 行列の足し算
    For i = 1 To 2
        For j = 1 To 2
            result(i, j) = matrix1(i, j) + matrix2(i, j)
        Next j
    Next i
    
    ' 結果を表示
    For i = 1 To 2
        For j = 1 To 2
            MsgBox "result(" & i & "," & j & ") = " & result(i, j)
        Next j
    Next i
End Sub

この例では、matrix1とmatrix2という2つの2次元配列を定義し、それらの要素を足し合わせてresult配列に格納しています。最後に、結果をメッセージボックスで表示します。

このようにExcel VBAには多次元配列(次元配列)があります。これにより、2次元以上の配列を使用して、複雑なデータ構造を扱うことができます。多次元配列は、行列や三次元のデータを格納するのに適しています。

記事