はじめに

今回はVBAの配列について②です。配列①では変数の復習と、配列とはという事でご紹介をさせてただきました。配列②では配列の種類と、配列の具体的な使用方法を中心にご紹介していきます。
本サイトでは、プログラミング初心者の方向けの丁寧な解説方法で紹介させていただいております。

この記事の概要

  • 使用頻度:
  • 難易度 :
  • 重要度 :
この記事を読んでわかること
  • 配列の種類(静的配列/動的配列)
  • 配列の構文
  • 配列の具体的使用例

詳しく解説していきます

配列は大きく分けて2種類あります。最初にサイズを決めて宣言する「静的(固定長)配列」と、プログラムの実行時にサイズが増減ができる「動的(可変長)配列」があります。
使い分けですが、入れるデータの数が最初から分かっている場合は静的配列に、わからない場合は動的配列を使用しましょう。

静的配列

  • メリット:メモリの使用効率が良く、処理速度が速い
  • デメリット:実行結果によってサイズを変更できない

静的配列の宣言

  • 構文:Dim 配列名(要素数) As データ型
  • 例文:Dim vbname(5) As String
  • 解説:6つの要素をもつ、文字型の「vbnama」配列の宣言

変数の宣言方法と似ています。「データ型」を選定し「配列名」をDimを使って宣言します。
変数との違いは、( )に「要素数」を記載する事です。

要素数は、”インデックス番号”や”添え字”とも言われます。()内に数字を指定して”何個データを格納するか”を示します。以後添え字と呼びます。

配列の添え字は「0」から始まります。
例えば(3)の場合、0,1,2,3の「4」つデータを格納する事ができます。図の配列に対して値を格納する際は下記のように指定します。

値の代入方法

  • vbname(0)=”田中”
  • vbname(1)=”佐藤”
  • vbname(2)=”山田”
  • vbname(3)=”森”
配列添え字説明

動的配列

  • メリット:プログラムに応じてサイズが変更できる。格納するデータ数が分からなくても使える為便利
  • デメリット:プログラム実行中にサイズを設定する為、実行速度が静的配列より劣る

動的配列の宣言

  • 構文:Dim 配列名() As データ型
  • 例文:Dim vbname() As String
  • 解説:文字型の「vbnama」配列の宣言

動的配列は宣言が済んだだけでは値を代入する事ができません。
値を代入する前に初期化が必要になります。

動的配列の初期化

  • 構文:ReDim 配列名(データ数)
  • 例文:ReDim vbname(3)
  • 解説:文字型の「vbname」配列の初期要素を「3」

初期化が済むと、要素数が確保され値の代入が可能になります。

値の代入方法

  • vbname(0)=”田中”
  • vbname(1)=”佐藤”
  • vbname(2)=”山田”
  • vbname(3)=”森”

静的配列と全くおんなじです

サンプルコード 動的配列の宣言、初期化
  1. Sub 配列の初期化()
  2. Dim vbname() As String
  3. ReDim vbname(3)
  4. vbname(0) = “田中”
  5. vbname(1) = “佐藤”
  6. vbname(2) = “山田”
  7. vbname(3) = “森”
  8. Dim i As Long
  9. For i = 0 To 3
  10. Cells(i + 1, “A”).Value = vbname(i)
  11. Next
  12. End Sub

実行結果

3行目ReDimで4つ要素を確保しています。
9行目から繰り返し処理のFor文が開始しています。iは0~1ずつ増加していき、セルの行数と変数の添え字を変化させてiが3まで実行したらループを抜けてSubプロシージャも終了する流れです。

動的配列の要素数の変更

  • 構文:ReDim 配列名(データ数)
  • 例文:ReDim vbname(4)
  • 解説:文字型の「vbname」配列の要素を「4」に変更

初期化と一緒です。要素数をプログラム内で変更する際は再度初期化をするという考えです。
注意としては、要素の追加ではなく要素の再設定の為元の値をクリアしてしまうという事です。

サンプルコード 動的配列の要素数の変更
  1. Sub 要素数の変更()
  2. Dim vbname() As String
  3. ReDim vbname(3)
  4. vbname(0) = “田中”
  5. vbname(1) = “佐藤”
  6. vbname(2) = “山田”
  7. vbname(3) = “森”
  8. ReDim vbname(4)
  9. vbname(4) = “山口”
  10. Dim i As Long
  11. For i = 0 To 4
  12. Cells(i + 1, “A”).Value = vbname(i)
  13. Next
  14. End Sub

実行結果

3行目ReDimで4つ要素を確保しています。
8行目でReDimを再度使用し、要素数を変更しています。
11行目から繰り返し処理のFor文が開始しています。iは0~1ずつ増加していき、セルの行数と変数の添え字を変化させてiが4まで実行したらループを抜けてSubプロシージャも終了する流れです。
8行目の要素数の変更をしている為4~7行目で配列に代入した値はクリアされており、要素数変更後に代入した9行目の値のみが配列に代入されているのが確認できます。

動的配列2確認

動的配列の要素数の変更(元の値を保持)

  • 構文:ReDim Preserve配列名(データ数)
  • 例文:ReDim Preserve vbname(4)
  • 解説:文字型の「vbname」配列の要素を「4」に変更

ReDim Preserveの記載で元の値を残して、要素を追加する事が可能です。

サンプルコード 動的配列の要素数の変更
  1. Sub 要素数の変更()
  2. Dim vbname() As String
  3. ReDim vbname(3)
  4. vbname(0) = “田中”
  5. vbname(1) = “佐藤”
  6. vbname(2) = “山田”
  7. vbname(3) = “森”
  8. ReDim Preserve vbname(4)
  9. vbname(4) = “山口”
  10. Dim i As Long
  11. For i = 0 To 4
  12. Cells(i + 1, “A”).Value = vbname(i)
  13. Next
  14. End Sub

実行結果

Preserveを追加しただけて、元の要素が保持される事確認できたでしょうか。
元の値をクリアして要素数を再設定したいか、単純に要素数を追加したいかで使い分けをするようにしましょう

さいごに

静的配列と動的配列の違い何となく分かっていただけたでしょうか。
データの数が最初から分かっているか否かで使い分けするようにしましょう。

配列まだまだ盛沢山なので、配列③に続きます
最後まで読んでいただきましてありがとうございました