固定配列は一度宣言したら、要素数を変更することはできません。
ですが、プログラム実行時に可変的に配列の要素数を変更したい時があります。
そんな時に適している配列が”動的配列”になります。
では、さっそく動的配列について解説していきます。
動的配列の記述方法
動的配列の宣言
動的配列を宣言する際は下のように記述します。
固定配列の場合はインデックス最大値を必ず指定して宣言します。
ですが、動的配列の宣言は下のように“インデックス最大値は空欄にする“わけです。
1 |
Dim a() As Variant |
しかし、下のようにインデックス最大値を指定しないまま使おうとすると「インデックスが有効範囲にありません。」というエラーが出てしまいます。
動的配列は”必要に応じて要素数を変更しながら使う”という考え方を持たなければならないのです。
動的配列の要素数を変更する:ReDim
動的配列の宣言後に要素数を設定するのが「ReDim」ステートメントになります。
この配列の要素数は「ReDim」で何度も変更できます。
1 |
ReDim a(2) As Variant |
しかし、「ReDim」ステートメントは実行するたびに配列内の値がクリアされてしまいます。
そこで、配列の中身を保持したまま要素数を変える場合は「Preserve」キーワードを付与します。
1 |
ReDim Preserve a(3) As Variant |
動的配列の確認
ここでは上で紹介した動的配列の内容を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub sample1() Dim a() As String '動的配列の宣言 ReDim a(1 To 2) As String '動的配列の要素数の設定 a(1) = "tanaka" a(2) = "sato" ReDim Preserve a(1 To 3) As String '配列の値を保持したまま要素数を再度設定 a(3) = "suzuki" Debug.Print a(1) '"tanaka"と表示される Debug.Print a(2) '"sato"と表示される Debug.Print a(3) '"suzuki"と表示される End Sub |
3行目:インデックス最大値を指定せずに宣言(動的配列を宣言)。
5行目:3行目の動的配列に要素数を設定。
9行目:配列の値を変えずに、5行目の要素数から数を増やす。
【応用】要素数を後から決める
たまに「要素数の数はその都度決めたい」という時があります。
つまり、「状況によっては動的配列の要素数が2つの時もあれば、5つの時がある」といった要素数が決まっていないときですね。
そんなときは下のような流れにすればOKです。
1.動的配列で宣言する。
2.「ReDim」で大まかな要素数に変更しておく。
3.処理が終わった後に「ReDim Preserve」で正しい要素数に変更する。
例えば、ユーザー側で変更できてしまう”シート数”を使って説明していきます。
下がワークシートのシートの状態です。
そして、下がコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub sample2() Dim i As Long Dim sheetNames() As String ReDim sheetNames(100) As String ' 絶対に超えることのない要素数を指定する For i = 1 To Sheets.Count sheetNames(i) = Sheets(i).Name Next ReDim Preserve sheetNames(i) As String ' ここで要素数を再度変更して確定させる MsgBox "動的配列の要素数:" & UBound(sheetNames) End Sub |
上のコードを実行すると下のような結果が得られます。
もちろん、シート数を増減させても大丈夫です。
1位 | 2位 | 3位 |
---|---|---|
Excel VBA 脱初心者のための集中講座 | パーフェクトExcel VBA | ExcelVBA 実戦のための技術 |
初心者~中級者 | 中級者 | 初心者~中級者 |
【初心者が手に取るべき参考書】 ・「書籍+動画」で圧倒的に理解しやすい入門書になっている。 ・丁寧で詳しい解説でボリューム感がある。 | 【より深い理解をしたい方にお勧めな参考書】 ・テーマに対して丁寧な解説・適度な深さで解説されている。 ・幅広くテーマを扱っていることから、基礎知識をあらかた網羅できる。 | 【入門書と一緒に買うべき参考書】 ・1つ1つのテーマを経験豊富なエンジニア視点で解説してくれている。 ・実践的で効果的なコードの書き方が理解できる。 |
【読んでみた一言】 正直、入門書はコレ一冊でいいかも。あとは中級者用の参考書に進むべし。 | 【読んでみた一言】 深く書かれているが、少々専門的に書かれていることから、読む前に数冊の入門書を読破したほうが良い。 | 【読んでみた一言】 基礎知識を持っている人が次のレベルに達するきっかけを与えてくれる参考書である。 |
スポンサーリンク