ExcelマクロVBA入門 | 第112回.動的配列(Redim) | Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説



最終更新日:2018-02-08

第112回.動的配列(Redim)


静的配列では、配列の要素数は宣言時点で決められていました、

しかし、プログラミングをする上で、

実行時点で要素数を決めたい場合や、実行途中で増やしたい場合が多くあります。

実行時点で要素数を増減できるのが、動的配列になります。



ReDimステートメント

動的配列変数に対するメモリ領域の再割り当てを行います。
プロシージャ レベルで使用します。

構文

ReDim [Preserve] varname(subscripts) [As type]

Preserve

省略可能です。
既存の配列に格納されている値を失うことなく、配列の最後の次元の要素数を変更する場合に使用する、キーワードです。

varname

必ず指定します。
宣言する変数の名前です。
変数の標準的な名前付け規則に従って指定します。

subscripts

必ず指定します。
配列変数の次元を指定します。
指定できる次元数の最大値は 60 です。
引数 subscripts の構文は、次のとおりです。
[lower To] upper [,[lower To] upper] . . .
引数 lower を省略した場合、配列の添字の最小値は Option Base ステートメントによって制御されます。
Option Base ステートメントが記述されていなければ、添字の最小値は 0 になります。

type

省略可能です。
変数のデータ型を指定します。


キーワード Preserve を指定した場合、変更できるのは、動的配列の最後の次元のサイズに限られます。

つまり、キーワードPreserveを使用した場合、動的配列のサイズを変更するために変えられるのは、添字の上限だけです。

また、次元数は変更できません。

添字の下限を変更しようとすると、エラーが発生します。

変数の初期化時には、数値変数は 0 に、可変長文字列は長さ 0 の文字列 ("") に初期化されて、固定長文字列には 0 が埋められます。

また、バリアント型 (Variant) 変数は Empty 値に初期化されます。



要素数の変更について

ReDim MyArray(10, 10)

ReDim MyArray(10)

ReDim MyArray(10, 10)

このように、Redimで次元も要素数も変更できます。

ただし、Redimにより、それまでに配列に入っていた値は失われます。

値を保持したまま、ReDimするには、
Preserveを指定します。

ReDim MyArray(10, 10)

ReDim Preserve MyArray(10, 11)

ReDim Preserve MyArray(11, 11)

Preserveを指定することで、値がそのまま残ります。

しかし、制限があります。

Preserveを指定した場合は、動的配列の最後の次元のサイズのみ変更可能で、
それより上位の次元は変更できません、エラーとなります。



次元数の最大値は60とはなっていますが、

通常は、2次元までにしましょう。

ワークシートが2次元なのですから。

それ以上の次元は、むやみに複雑化させるだけです。


以下も参考にして下さい。

配列の使い方について

1次元配列の並べ替え(バブルソート,クイックソート)

2次元配列の並べ替え(バブルソート,クイックソート)

動的2次元配列の次元を入れ替えてシートへ出力(Transpose)

マクロVBAの高速化・速度対策の具体的手順と検証

大量データにおける処理方法の速度王決定戦




同じテーマ「マクロVBA入門」の記事

第109回.列挙型(列挙体)Enum
第110回.ユーザー定義型(構造体)Type
第111回.静的配列
第112回.動的配列(Redim)
第113回.配列に関連する関数
第114回.セル範囲⇔配列
第115回.Split関数
第116回.ファイル操作U(OpenとClose)
第117回.ファイル操作U(Line Input #)
第118回.ファイル操作U(Print #)
第119回.ファイルシステムオブジェクト(FileSystemObject)

新着記事 ・・・新着記事一覧を見る

数値範囲で表検索するVLOOKUP近似一致|エクセル関数超技(10月5日)
エクセルVBAでのシート指定方法|VBA技術解説(9月8日)
VBAのクラスとは(Class,Property,Get,Let,Set)|VBA技術解説(8月28日)
VBAこれだけは覚えておきたい必須基本例文10|VBA技術解説(8月22日)
VBAの省略可能な記述について|ExcelマクロVBA技術解説(8月11日)
複数条件判定を行う時のコツ|ExcelマクロVBA技術解説(7月11日)
For Next の使い方いろいろ|VBA技術解説(6月14日)
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.マクロって何?VBAって何?|ExcelマクロVBA入門
7.定数と型宣言文字(Const)|ExcelマクロVBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作



  • >
  • >
  • >
  • 動的配列(Redim)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。





    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

    本文下部へ

    ↑ PAGE TOP