サイトについて      連絡先   検索

VBA 配列

はじめに

Excel VBA で配列の宣言・代入など操作する方法を紹介します。

静的配列は宣言時に要素数を決定します。動的配列は宣言後に要素数を変更できます。

配列のすべての要素を取得または設定するには For 文などのループ処理を使います。

配列の宣言

配列とは複数の同じ型の変数を 1 つにまとめたものです。

静的配列

宣言時に要素数を決定するのが静的配列です。

Dim 変数名(要素数) As 型名のようにして宣言します。

変数名の後ろに () で要素数を指定します。要素数に 3 を指定すると 0 ~ 3 の 4 つの変数があることになります。


' 静的(0 ~ 3) の 4 つの要素を持ちます。
Dim 静的(3) As Integer

' このように何個も同じ変数を作る必要がなくなります。
Dim 数値0 As Integer
Dim 数値1 As Integer
Dim 数値2 As Integer
Dim 数値3 As Integer

Dim 変数名(最小 To 最大) As 型名のようにも宣言できます。

要素数の最小インデックスと最大インデックスを指定して宣言できます。1 To 3 にすると


' 静的(1 ~ 3) の 3 つの要素を持ちます。
Dim 静的(1 To 3) As Integer

動的配列

宣言時に要素数を指定しないのが動的配列です。

少し複雑なので最初は静的配列で慣れてから使ったほうが理解しやすいです。

Dim 変数名() As 型名のようにして宣言します。

宣言しただけでは要素数なしの、なにも値を代入できない状態です。

ReDim 変数名(要素数)で要素数を決定します。何度でも要素数を変更できます。


' まだ要素数はありません。
Dim 動的() As Integer

' 配列の要素数を変更
ReDim 動的(3)      ' Dim 配列(3) と要素数が同じになります。
ReDim 動的(4)      ' Dim 配列(4) と要素数が同じになります。
ReDim 動的(1 To 3) ' Dim 配列(1 To 3) と要素数が同じになります。

ReDim Preserve 変数名(要素数)のように Preserve を付ける方法もあります。


Dim 動的() As Integer

ReDim Preserve 動的(3)
ReDim Preserve 動的(4)
ReDim Preserve 動的(1 To 3)

ReDim で要素数を変更すると、配列に入っていた値はすべて初期化されます。Integer なら 0 になります。Preserve を付けるとその値が保持されます。

Preserve を付けると配列の最小インデックスが異なるときにエラーになります。


ReDim 動的(3)      ' 0 ~ 3
ReDim 動的(1 To 3) ' 1 ~ 3 変更できる

ReDim Preserve 動的(3)      ' 0 ~ 3
ReDim Preserve 動的(1 To 3) ' 最小インデックスが 0 から 1 になっているのでエラー

配列の操作

配列の値を取得や代入する方法を紹介します。

配列の何番目の要素かをインデックスといいます。

配列(インデックス)で指定したインデックスの要素の値を取得したり代入したりできます。


' 配列(0 ~ 3) の 4 つの要素を持ちます。
Dim 配列(3) As Integer

' 配列に値を代入
配列(0) = 0
配列(1) = 10
配列(2) = 20
配列(3) = 30
  
' 配列の値を取得
Dim i As Integer
i = 配列(1)
Debug.Print (i) ' 10  
i = 配列(2)
Debug.Print (i) ' 20

配列に配列を代入

配列に代入するには次の条件があります。要素数は関係ありません。

静的配列には代入できません。


Dim 動的() As Integer
Dim 静的(3) As Integer

' 型が一致している
Dim 一致(4) As Integer
動的 = 一致 ' 代入できる
静的 = 一致 ' エラー

' 型が一致していない
Dim 不一致(3) As Long
動的 = 不一致 ' エラー
静的 = 不一致 ' エラー

配列の全要素を参照する

配列を初期化するときなど、ループで回したいときに要素数の最小値と最大値が必要になります。


Dim 配列(3) As Integer
Dim min As Integer
min = LBound(配列) ' 配列の最小インデックスを返します。 i = 0
Dim max As Integer
max = UBound(配列) ' 配列の最大インデックスを返します。 i = 3

' ループできます。
Dim i As Integer
For i = min To max
    ' i の値が 0 ~ 3 まで変化します。
    配列(i) = 10
Next

二次元配列

今まで紹介した配列は一次元配列です。これを二次元や三次元など次元数を増やせます。

関連ページ