【VBA】内容を保持したまま配列を拡張する

Fortran

既に配列内に格納された情報を保持したまま、配列を拡張する方法です。

ReDimステートメント

配列の拡張には、ReDimステートメントを利用します。

ただ、ReDim 配列名(配列のサイズ)のみでは、 配列の大きさは変わるものの、格納された情報は消えてしまいます。

そこで、ReDim のあとにPreserveをいれます。

こうすることで、格納された情報を保持したまま配列のサイズを変更することができます。

ReDim Preserve 配列名(配列の大きさ)

なお、注意点としては次のことが挙げられます。

  • 配列は、動的に宣言しておく必要がある。
  • 変更できるのは、配列の最後の次元のみ。

それぞれ簡単に説明します。

配列は、動的に宣言しておく

これは、最初に配列を宣言するときにDim 配列名(1 to 10, 1 to 20)のような固定長での宣言ではなく、Dim 配列名()のように動的な宣言をすることです。

変更できるのは、配列の最後の次元のみ

変更できるのは配列の最後の次元となります。

したがって、2次元配列は(行、列)となるので変更対象は列となります。

また、3次元配列は(層、行、列)となるので、こちらも変更対象は列となります。

ReDimステートメントのイメージ

簡単ですがイメージを作成しましたので、参考にしてください。

まずは、ReDimステートメントを使用する際にPreserveを入れなかった場合です。

宣言の都度、新たに配列が作成されますが各要素はコピーされないので保持されません。

次に、Preserveを使用した場合です。この場合、新たに配列が作成されたうえで各要素がコピーされます。したがって、既存の配列に格納されていた各要素は保持された状態となります。

最後に、2次元配列の場合です。2次元配列は行・列となるので列が変更の対象となります。

ReDim Preserveでは事前に配列の大きさを決めなくてよいので便利です。

配列の大きさを知る

最後に、配列の大きさを調べる方法です。

配列の大きさ(最大値)を調べるにはUbound関数を使用します。

Ubound(配列、次元)

ReDim Preserveと組み合わせて使用する場合、配列の最後の次元の大きさが必要となるので、2次元配列の場合は列を示す”2”,3次元配列の場合も列を示す”3″を指定すればよいことになります。

コメント

タイトルとURLをコピーしました