【VBA】動的配列の使い方【宣言から要素数の設定まで】

固定配列は一度宣言したら、要素数を変更することはできません。

ですが、プログラム実行時に可変的に配列の要素数を変更したい時があります。

 

そんな時に適している配列が”動的配列”になります。

では、さっそく動的配列について解説していきます。

スポンサーリンク



動的配列の記述方法

動的配列の宣言

動的配列を宣言する際は下のように記述します。

Dim 配列名() As 型名

 

固定配列の場合はインデックス最大値を必ず指定して宣言します。

ですが、動的配列の宣言は下のようにインデックス最大値は空欄にするわけです。

 

しかし、下のようにインデックス最大値を指定しないまま使おうとすると「インデックスが有効範囲にありません。」というエラーが出てしまいます。

Dim A() As Variant
A(0) = “tanaka”

 

動的配列は”必要に応じて要素数を変更しながら使う”という考え方を持たなければならないのです。

 

動的配列の要素数を変更する:ReDim

動的配列の宣言後に要素数を設定するのが「ReDim」ステートメントになります。

この配列の要素数は「ReDim」で何度も変更できます。

 

しかし、「ReDim」ステートメントは実行するたびに配列内の値がクリアされてしまいます。

そこで、配列の中身を保持したまま要素数を変える場合は「Preserve」キーワードを付与します。

 

動的配列の確認

ここでは上で紹介した動的配列の内容を確認します。

3行目:インデックス最大値を指定せずに宣言(動的配列を宣言)。

5行目:3行目の動的配列に要素数を設定。

9行目:配列の値を変えずに、5行目の要素数から数を増やす。

 

【応用】要素数を後から決める

たまに「要素数の数はその都度決めたい」という時があります。

つまり、「状況によっては動的配列の要素数が2つの時もあれば、5つの時がある」といった要素数が決まっていないときですね。

そんなときは下のような流れにすればOKです。

1.動的配列で宣言する。

2.「ReDim」で大まかな要素数に変更しておく。

3.処理が終わった後に「ReDim Preserve」で正しい要素数に変更する。

 

例えば、ユーザー側で変更できてしまう”シート数”を使って説明していきます。

下がワークシートのシートの状態です。

 

そして、下がコードになります。

 

上のコードを実行すると下のような結果が得られます。

もちろん、シート数を増減させても大丈夫です。

 

【VBA】配列の使い方【宣言の仕方・種類・関数を解説】
コード内では変数を使うことで値に名前を付けて扱うことができます。 ですが、下のように同種の値を複数宣言するのは手間だし、管理するにあたって非効率なケースが出てきたりします。 Dim name1 As String Di...
【VBA】固定配列の使い方【宣言から使用法まで】
固定配列は”宣言時にその配列の要素数を指定する配列”です。 なので、指定した要素数は変えることはできません。 ちなみに逆にプログラム実行時に可変的に配列の要素数を変えられる配列を『動的配列』といいます。 固定配...
【VBA】多次元配列の使い方【記述の仕方・イメージを解説】
一次元配列はよく使われる「複数の箱が一列に並べられている」といったイメージの配列です。 そして、配列には多次元の配列も扱うことができます。 その代表が”2次元配列”です。 その多次元配列について解説していき...

 

〇おすすめのVBA参考書ランキング!

1位

2位

3位

Excel VBA 脱初心者のための集中講座パーフェクトExcel VBAExcelVBA 実戦のための技術
初心者~中級者中級者初心者~中級者
【初心者が手に取るべき参考書】

・「書籍+動画」で圧倒的に理解しやすい入門書になっている。

・丁寧で詳しい解説でボリューム感がある。

【より深い理解をしたい方にお勧めな参考書】

・テーマに対して丁寧な解説・適度な深さで解説されている。

・幅広くテーマを扱っていることから、基礎知識をあらかた網羅できる。

【入門書と一緒に買うべき参考書】

・1つ1つのテーマを経験豊富なエンジニア視点で解説してくれている。

・実践的で効果的なコードの書き方が理解できる。

【読んでみた一言】
正直、入門書はコレ一冊でいいかも。あとは中級者用の参考書に進むべし。
【読んでみた一言】
深く書かれているが、少々専門的に書かれていることから、読む前に数冊の入門書を読破したほうが良い。
【読んでみた一言】
基礎知識を持っている人が次のレベルに達するきっかけを与えてくれる参考書である。

¥2,794円
amazonで確認!

¥3,608円
amazonで確認!

¥2,640円
amazonで確認!

スポンサーリンク