大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、1次元配列や2次元配列を宣言する方法と、初期化する方法について、ご紹介します。配列の次元や大きさを宣言するのは、「Redim」を使います。配列を初期化する方法としては、「Redim」、「Redim Preserve」、「Erase」があります。配列を使えば、VBAを高速化することができますので、配列をマスターしていきましょう。

はじめに

この記事では、1次元配列や2次元配列の宣言と初期化について、ご紹介します。

配列の大きさを宣言したい場合は、「Redim」を使います。

「Redim Preserve」を使うと、元の値を保持したまま、配列の大きさを宣言し直すことができます。

配列を完全に初期化したい場合は、「Erase」を使うという感じです。

配列をうまく使うと、VBAを高速化することができますので、マスターしていきましょう。

では、配列の大きさを宣言する方法と初期化する方法について、解説していきます。

この記事で紹介すること

  • 配列の大きさを宣言する方法
  • 配列を初期化する方法

目次から見たい項目へ移動すると便利ですよ。

目次

VBAで配列の宣言(DimとRedim)

VBAで配列を宣言するには、「Dim」と「Redim」を使います。

「Dim」で配列を宣言して、「Redim」で配列の大きさを決定します。

配列でのポイントは、

  • 配列の次元数
  • 0番目スタートか、1番目がスタートか

というところです。

次元は、1次元配列や、2次元配列のように配列の次元を決めるものです。

配列は、0番目から始ったり、1番目から始ったりします。

それぞれの次元と、スタートする番号を変えて配列を宣言してみます。

1次元配列

1次元配列のイメージを見てみます。

例えば、0番目からスタートする配列は、次のようなイメージです。

0番目からスタート

0番目スタートの1次元配列のイメージ

VBAで、0番目から3番目までの1次元配列を宣言して、配列に値を入力するVBAコードです。

Sub TEST1()
    
    Dim a
    '1次元配列を宣言
    ReDim a(3) '0番目スタート
    
    '配列に値を入力
    a(0) = 1
    a(1) = 2
    a(2) = 3
    a(3) = 4
    
End Sub

実行してみます。

0番目からの1次元配列を宣言した結果

0番目から3番目までの、1次元配列を作成できました。

1番目からスタート

続いて、1番目からスタートする配列は、次のようなイメージです。

1番目スタートの1次元配列のイメージ

VBAで、1番目から3番目までの1次元配列を宣言して、配列に値を入力するVBAコードです。

Sub TEST2()
    
    Dim a
    '1次元配列を宣言
    ReDim a(1 To 3) '1番目スタート
    
    '配列に値を入力
    a(1) = 1
    a(2) = 2
    a(3) = 3
    
End Sub

実行してみます。

1番目からの1次元配列を宣言した結果

1番目から3番目までの、1次元配列を作成できました。

こんな感じで、「Dim」で宣言して、「Redim」で大きさを設定することができます。

1次元配列は、0番目からスタートする配列が一般的です。

2次元配列

つづいて、2次元配列を宣言してみます。

0行0列からスタート

0行、0列からスタートする2次元配列を設定してみます。

イメージはこちらです。

0行、0列からスタートする2次元配列のイメージ

では、0行、0列から始まるする2次元配列を宣言します。

Sub TEST3()
    
    Dim a
    '2次元配列を宣言
    ReDim a(2, 3) '0行0列スタート
    
    '配列に値を入力
    a(0, 0) = 1
    a(0, 1) = 2
    a(0, 2) = 3
    a(0, 3) = 4
    
    a(1, 0) = 5
    a(1, 1) = 6
    a(1, 2) = 7
    a(1, 3) = 8
    
    a(2, 0) = 9
    a(2, 1) = 10
    a(2, 2) = 11
    a(2, 3) = 12
    
End Sub

実行してみます。

0行、0列から始まる2次元配列を宣言した結果

0行0列から始まる2次元配列を、設定できました。

1行1列からスタート

次は、1行1列から始まる2次元配列を、宣言してみます。

イメージはこちらになります。

1行、1列から始まる2次元配列のイメージ

1行1列から始まる2次元配列を宣言して、値を入力するVBAコードです。

Sub TEST4()
    
    Dim a
    '2次元配列を宣言
    ReDim a(1 To 2, 1 To 3) '1行1列スタート
    
    '配列に値を入力
    a(1, 1) = 1
    a(1, 2) = 2
    a(1, 3) = 3
    a(2, 1) = 4
    a(2, 2) = 5
    a(2, 3) = 6
    
End Sub

では、途中まで実行して、配列の中身を見てみます。

1行1列から始まる2次元配列を宣言して値を入力した結果

1行1列から始まる配列を宣言して、値を入力することができました。

セル範囲を指定して、セルの値を配列に格納した場合は、この1行1列から始まる配列になります。

今回は、わかりやすく値をVBAコードの中で入力していますけども、実際は、セルに入力された値を配列に入力して、配列を作成することの方が多いです。

VBAで配列の初期化

配列を初期化する方法について、ご紹介します。

配列の大きさを指定して値を入力した後に、配列を初期化したり、再度、配列の大きさなどを変更する方法です。

配列の初期化で、3種類の方法をご紹介します。

  • 配列の大きさを宣言し直す
  • 元の値を残して、配列の大きさを宣言し直す
  • 配列を初期化する

という感じです。

配列の大きさを宣言し直す(Redim)

配列の大きさを宣言し直す方法です。

一度宣言した配列を、再度、宣言し直して配列を初期化します。

0番目から3番目までの配列を、0番目から4番目までの配列に、宣言し直すVBAコードです。

Sub TEST5()
    
    '1次元配列を作成
    Dim a
    ReDim a(3)
    a(0) = 1
    a(1) = 2
    a(2) = 3
    a(3) = 4
    
    '配列を再宣言
    ReDim a(4) '←ここ
    
End Sub

これは簡単で、もう一度「Redim」を使って、配列の大きさを宣言するだけです。

宣言し直す前です。

宣言し直す前の配列

宣言し直す前の配列

0~3番目までの配列です。値が入力されています。

宣言し直した後です。

宣言し直した後の配列

Redimで宣言し直した後の配列

0~4番目までの配列になりました。

値は初期化されて、すべて「Empty」になりました。

何回でも宣言し直すことができます

ちなみに何回でも、配列の大きさを宣言し直すことができます。

こんな感じです。

Sub TEST6()
    
    '配列を作成
    Dim a
    ReDim a(3)
    
    a(0) = 1
    a(1) = 2
    a(2) = 3
    a(3) = 4
    
    '配列を再宣言
    ReDim a(4) '←ここ
    ReDim a(5) '←ここ
    ReDim a(6) '←ここ
    
End Sub

実行してみます。

Redimを複数回実行して、配列の大きさを宣言し直した結果

0~6番目までの配列になりました。

配列の値は、もちろん初期化されています。

元の値を残して、配列の大きさを宣言し直す(Preserve)

次は、元の値を残して、配列の大きさを変更する方法です。

「Preserve」を使います。

0~3番目までの配列を、値は残したまま、0~4番目までの配列に、宣言し直すVBAコードです。

Sub TEST7()
    
    '配列を作成
    Dim a
    ReDim a(3)
    
    a(0) = 1
    a(1) = 2
    a(2) = 3
    a(3) = 4
    
    '値を保持して、配列を再宣言
    ReDim Preserve a(4) '←ここ
    
End Sub

配列の大きさを宣言し直す際に、「Redim Preserve」を使うところがポイントです。

配列の大きさを、宣言し直す前の配列です。

宣言し直す前の配列

配列の大きさを宣言し直す前の配列

0~3番目までの配列に、値が入力されています。

では、値を残したまま、配列の大きさを宣言し直してみます。

元の値を保持して、宣言し直した後の配列

Redim Preserveで配列の大きさを宣言し直した後の配列

配列の大きさが、0~4番目までとなりました。

元の値は、入力されたままです。

元の値を保持したまま、配列の大きさを変更したい場合に使えます。

何回でも宣言し直すことができます

ちなみに、「Redim Preserve」も何回でも使うことができます。

こんな感じです。

Sub TEST8()
    
    '配列を作成
    Dim a
    ReDim a(3)
    
    a(0) = 1
    a(1) = 2
    a(2) = 3
    a(3) = 4
    
    '値を保持して配列を再宣言
    ReDim Preserve a(4) '←ここ
    ReDim Preserve a(5) '←ここ
    ReDim Preserve a(6) '←ここ
    
End Sub

実行してみます。

Redim Preserveを複数回使って、配列の大きさを宣言し直した結果

結果は、0~6番目までの配列になりました。

元の値は、残ったままです。

必要な配列の大きさがわからない場合に使えます。

例えば、とりあえず大きめの配列を用意して、最後に必要な配列のサイズに「Redim Preserve」で配列の大きさを宣言し直すという感じです。

次元数の変更はできない

「Preserve」では、「次元数」は変更できません。

例えば、1次元配列を、値を保持したまま、2次元配列に宣言し直すというのは、できません。

1次元配列を、「Redim Preserve」で2次元配列に宣言し直すVBAコードです。

Sub TEST9()
    
    '配列を作成
    Dim a
    ReDim a(3)
    
    a(0) = 1
    a(1) = 2
    a(2) = 3
    a(3) = 4
    
    '値を保持して、1→2次元配列に再宣言
    ReDim Preserve a(2, 3) '←これはエラーとなる
    
End Sub

実行してみます。

Redim Preserveで1次元配列を2次元配列に宣言し直そうとするとエラーとなる

結果は、エラーとなりました。

値を残して配列を宣言し直す場合は、次元数は同じにしましょう。

配列を初期化(Erase)

配列を初期化する方法です。「Erase」を使います。

一度宣言した配列を、まっさらな状態にすることができます。

配列を初期化するVBAコードです。

Sub TEST10()
    
    '配列を作成する
    Dim a
    ReDim a(3)
    
    a(0) = 1
    a(1) = 2
    a(2) = 3
    a(3) = 4
    
    '配列を初期化
    Erase a
    
End Sub

初期化する前の配列です。

初期化前の配列

初期化前の配列

では、初期化してみます。

初期化後の配列

Eraseで配列を初期化した結果

配列の値や大きさもすべて初期化されました。

完全に配列を初期化したい場合に使えます。

配列で計算してみる

宣言した配列を使って、簡単な計算をしてみます。

配列の足し算

2つの配列の足し算をしてみます。

最初に断っておくと、配列を足し算する便利なVBA関数は、ありません。

地道に、For文で足し算をしていきます。

こんな感じです。

Sub TEST11()
    
    '1つ目の配列を作成
    Dim a
    ReDim a(3)
    a(0) = 1
    a(1) = 2
    a(2) = 3
    a(3) = 4
    
    '2つ目の配列を作成
    Dim b
    ReDim b(3)
    b(0) = 1
    b(1) = 2
    b(2) = 3
    b(3) = 4
    
    '演算後の結果を保存する配列
    Dim c
    ReDim c(3)
    
    '2つの配列を足し算
    For i = 0 To 3
        c(i) = a(i) + b(i)
    Next
    
End Sub

配列の足し算の結果を見てみます。

2つの配列を足し算した結果

配列をFor文で足し算した結果

配列の足し算ができました。

配列を使うと計算した結果を、セルに一括で入力できるので、高速化することができます。

条件文を作成

配列を使ってIfで条件文を作成してみます。

配列の中に、「2」があれば、メッセージを表示するという簡単なVBAコードです。

Sub TEST12()
    
    '配列を作成
    Dim a
    ReDim a(3)
    a(0) = 1
    a(1) = 2
    a(2) = 3
    a(3) = 4
    
    '配列で条件文を使う
    For i = 0 To 3
        '値が「2」の場合
        If a(i) = 2 Then
            MsgBox "2を含みます"
            Exit For
        End If
    Next
    
End Sub

実行してみます。

配列で条件文を使った結果

配列で条件文を使った結果

結果は、「2を含みます」となりました。

配列の値に対して、Ifで条件文を作成することもできます。

おわりに

この記事では、1次元配列や2次元配列の宣言と初期化について、ご紹介しました。

配列の大きさを宣言したい場合は、「Redim」を使います。

「Redim Preserve」を使うと、元の値を保持したまま、配列の大きさを宣言し直すことができます。

配列を完全に初期化したい場合は、「Erase」を使うという感じです。

配列をうまく使うと、VBAを高速化することができますので、マスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す