【Excel VBA】配列を宣言する方法!動的配列や二次元配列も!

VBAで配列を宣言したいときはないでしょうか。

けど、そんな中で悩むことは、

・VBAで配列を宣言したいが方法がよくわからない
・VBAで配列宣言後に初期値を代入したいが方法がよくわからない
・VBAで複数の配列をまとめて宣言したいが方法がよくわからない

ですよね。

今回はそんなお悩みを解決する

・VBAで配列(静的配列/動的配列)を宣言する方法
・VBAで配列宣言後に初期値を代入する方法
・VBAで複数の配列をまとめて宣言する方法

についてまとめます!

VBAで配列を宣言する方法

配列を宣言する

配列を宣言するとき使用するのは Dim ステートメントとなり、Dimステートメントで定義した変数名に () を付けると配列になります。
宣言の方法については制定期配列と動的配列の2つのパターンがあります。

静的配列

Dimステートメントで配列宣言すると同時に要素数を指定すると静的配列となります。
この場合、要素数は固定されるため静的と表現されます。
構文は以下の通りです。

Dim 変数名(要素数) As データ形式

配列内の要素の位置番号を指定する場合はToでつなげて指定ができます。
構文は以下の通りです。

Dim 変数名(開始位置番号 To 終了位置番号) As データ形式

タカヒロ
タカヒロ
配列はデフォルトでは0番目から要素が配置されます。セルと連動させる場合にはセルは1番から始まりますので、(1 To 10)のように1はじまりで配列の要素を指定するとよいでしょう。

動的配列

Dimステートメントで配列宣言はしたが、要素数を指定しない場合は動的配列となります。
配列の要素が固定出なく変動する場合はこちらを選択します。

Dim 変数名() As データ形式

要素数がきまったらReDim ステートメントで配列の要素数を宣言していくか、Array関数で配列に値を代入していきます。
構文は以下の通りです。

ReDim 変数名(要素数)
Array(要素0,要素1,要素2,・・・)

二次元配列

配列は1つの列で構成されている1次元配列が基本となりますが、複数列を設けることができます。

例えば1列から複数の列要素で構成すると、行×列の2次元配列の構成になります。

タカヒロ
タカヒロ
二次元配列は表のイメージでとらえるとわかりやすいでしょう。

さらにもう一つの要素を追加すると三次元配列と次元が増えていく形となります。これを多次元配列と呼び見ます。

タカヒロ
タカヒロ
三次元配列はExcelの表にシート名の要素が加わったととらえるとわかりやすいでしょう。

宣言の方法は一次元配列と同じくDimステートメントで配列宣言する形となります。
構文は以下の通りです。

Dim 変数名(要素数,要素数,…) As データ形式

配列内の要素の位置番号を指定する場合はToでつなげて指定ができます。
構文は以下の通りです。

Dim 変数名((開始位置番号 To 終了位置番号),(開始位置番号 To 終了位置番号),…) As データ形式

配列宣言時に設定できるデータ形式

データ形式については以下の通りとなります。

型の値 型の形式 内容
Variant 様々型 すべてのデータ形式に対応し、値の内容によって動的にデータ型が変更されます。
Boolean ブール型 ブール形式のデータ(TrueまたはFalse)が扱えます。
Byte バイト型 0~255までの整数が扱えます。
Integer 整数型 -32,768~32,767の整数が扱えます。
Long 長整数型 -2,147,483,648~2,147,483,647の整数が扱えます。
Currency 通貨型 -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807の通貨値が扱えます。
Single 単精度浮動小数点数型 単精度浮動小数点数型が扱えます。
Double 倍精度浮動小数点数型 倍精度浮動小数点数型が扱えます。
Date 日付型 日付と時間のデータが扱えます。
String 文字列型 文字列が扱えます。
Object オブジェクト型 様々なオブジェクトが扱えます。設定する時はSetステートメントを使います。

静的配列宣言のサンプルコード

静的配列宣言のサンプルコードについていくつか記載します。

例えば変数に整数型を指定する時は、以下のようにIntegerやLongのデータ型を指定します。

Sub 配列テスト1()

   Dim arrTemp(2) As Integer
   Dim i As Integer
   
   '配列に値を代入します。
   arrTemp(0) = 1
   arrTemp(1) = 2
   arrTemp(2) = 3
   
    '配列に格納された値すべてを対象に処理します。
    For i = LBound(arrTemp) To UBound(arrTemp)
        '配列の値を出力します。
        Debug.Print arrTemp(i)
    Next
End Sub

結果です。

1
2
3

文字列型の場合は以下のようにStringのデータ型を指定します。

Sub 配列テスト2()

   Dim arrTemp(2) As String
   Dim i As Integer
   
   '配列に値を代入します。
   arrTemp(0) = "あ"
   arrTemp(1) = "い"
   arrTemp(2) = "う"
   
    '配列に格納された値すべてを対象に処理します。
    For i = LBound(arrTemp) To UBound(arrTemp)
        '配列の値を出力します。
        Debug.Print arrTemp(i)
    Next
End Sub

結果です。



データ型をおまかせにするVariant型について説明をします。

呼び方はバリアント型といい、変数の値によってデータ型を自動的に変換する形式になります。

As以降を省略した「Dim 配列名(要素数)」とした場合にこのVariant型が指定される形になります。

変数にVariant型を指定した場合、どのようにデータ型が変化するかサンプルでみてみましょう。

Sub 配列テスト3()

   Dim arrTemp(2) As Variant
   Dim i As Integer
   
   '配列に値を代入します。
   arrTemp(0) = "あ"
   arrTemp(1) = 1
   arrTemp(2) = "う"
   
    '配列に格納された値すべてを対象に処理します。
    For i = LBound(arrTemp) To UBound(arrTemp)
        '配列の値を出力します。
        Debug.Print arrTemp(i)
    Next
End Sub

数字の要素はInteger型になり、文字列の要素はStringになっていますね。

動的配列宣言のサンプルコード

次に要素数を指定しない動的配列のコードサンプルについて説明をします。

Sub 配列テスト4()

   Dim arrTemp() As Integer
   Dim i As Integer
   
   ReDim arrTemp(2)
   
   '配列に値を代入します。
   arrTemp(0) = 1
   arrTemp(1) = 2
   arrTemp(2) = 3
   
    '配列に格納された値すべてを対象に処理します。
    For i = LBound(arrTemp) To UBound(arrTemp)
        '配列の値を出力します。
        Debug.Print arrTemp(i)
    Next

End Sub

これまで配列の要素数を宣言時に指定してきましたが、今回は指定をせず、ReDim ステートメントで後で要素数を指定しています。

ReDim arrTemp(2)

結果です。

1
2
3

Array関数で配列の値を代入すると、値の件数に応じて要素が自動的に割り当てられていきます。

Sub 配列テスト5()

   Dim arrTemp() As Variant
   Dim i As Integer
   
   '配列に値を代入します。
   arrTemp = Array(1, 2, 3)
   
    '配列に格納された値すべてを対象に処理します。
    For i = LBound(arrTemp) To UBound(arrTemp)
        '配列の値を出力します。
        Debug.Print arrTemp(i)
    Next

End Sub

Array関数へ値を入力し、値を配列へ代入すると要素も自動で割り当てられます。

arrTemp = Array(1, 2, 3)

結果です。

1
2
3

二次元配列宣言のサンプルコード

二次元配列宣言のサンプルコードについて記載します。

例えば変数に整数型を指定する時は、以下のようにIntegerやLongのデータ型を指定します。

Sub 二次元配列テスト1()

   Dim arrTemp(2, 1) As Variant
   Dim i As Integer
   Dim j As Integer
   
   '配列に値を代入します。
    arrTemp(0, 0) = 1
    arrTemp(0, 1) = 2
    arrTemp(1, 0) = 3
    arrTemp(1, 1) = 4
    arrTemp(2, 0) = 5
    arrTemp(2, 1) = 6
   
   
    '配列に格納された値すべてを対象に処理します。
    For i = LBound(arrTemp, 1) To UBound(arrTemp, 1)
        For j = LBound(arrTemp, 2) To UBound(arrTemp, 2)

            '配列の値を出力します。
            Debug.Print arrTemp(i, j)
        Next
    Next
End Sub

配列へそれぞれの次元ごとに要素数を指定して値を代入していきます。

arrTemp(0, 0) = 1
arrTemp(0, 1) = 2
arrTemp(1, 0) = 3
arrTemp(1, 1) = 4
arrTemp(2, 0) = 5
arrTemp(2, 1) = 6

結果です。

1
2
3
4
5
6

VBAで配列宣言後に一括で初期値を代入する方法

VBAで配列宣言後に一括で初期値を代入する方法について説明をします。

配列を宣言と同時に初期値を代入したいと考える時がありますが、VBAではDim宣言と同時に値を代入することはできませんので、コードは分ける形となります。

また、一括代入する方法は3種類あります。

Array関数で一括代入する

Array関数で配列へ一括代入する方法があります。
サンプルコードは以下の通りです。

Sub 配列テスト5()

   Dim arrTemp() As Variant
   Dim i As Integer
   
   '配列に値を代入します。
   arrTemp = Array(1, 2, 3)
   
    '配列に格納された値すべてを対象に処理します。
    For i = LBound(arrTemp) To UBound(arrTemp)
        '配列の値を出力します。
        Debug.Print arrTemp(i)
    Next

End Sub

タカヒロ
タカヒロ
Array関数を使用する場合は配列のデータ形式はVariantにしてください。他の指定の場合エラーとなります。

Rangeプロパティで一括代入する

Rangeプロパティで配列へ一括代入する方法があります。

セルを使いますので、以下のようにセルへ値を入力します。

サンプルコードは以下の通りです。

Sub 配列テスト6()

   Dim arrTemp() As Variant
   Dim i As Integer
   
   '配列に値を代入します。
   arrTemp = Range("A1:A3")
   
    '配列に格納された値すべてを対象に処理します。
    For i = LBound(arrTemp) To UBound(arrTemp)
        '配列の値を出力します。
        Debug.Print arrTemp(i, 1)
    Next

End Sub

以下のようにRangeプロパティと配列を=でつなげると2次元配列としてRangeで指定したセル範囲の値が一括代入されます。

arrTemp = Range("A1:A3")

配列の値を出力します。二次元配列のため変数iの他、2次元目の位置番号を指定しています。

Debug.Print arrTemp(i, 1)

Split関数で一括代入する


Split関数で配列へ一括代入する方法があります。
サンプルコードは以下の通りです。

Sub 配列テスト7()

   Dim arrTemp As Variant
   Dim i As Integer
   
   'Split関数で分割し配列に値を代入します。
   arrTemp = Split("1,2,3", ",")
   
    '配列に格納された値すべてを対象に処理します。
    For i = LBound(arrTemp) To UBound(arrTemp)
        '配列の値を出力します。
        Debug.Print arrTemp(i)
    Next

End Sub

Split関数の詳細、構文については以下の通りです。


構文 Split(文字列, 区切り文字)
説明 指定区切り文字を基準に文字列を分割して配列へ変換します。

Split関数で分割し配列に値を代入します。

arrTemp = Split("1,2,3", ",")

タカヒロ
タカヒロ
“1,2,3”の部分は文字列を格納した変数を割り当ててもよいです。

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・VBAで配列(静的配列/動的配列)を宣言する方法
・VBAで配列宣言後に初期値を代入する方法
・VBAで複数の配列をまとめて宣言する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です