第112回.動的配列(Redim)
静的配列では、配列の要素数は宣言時点で決められていました、
しかし、プログラミングをする上で、
実行時点で要素数を決めたい場合や、実行途中で増やしたい場合が多くあります。
実行時点で要素数を増減できるのが、動的配列になります。
ReDimステートメント
プロシージャ レベルで使用します。
構文
ReDim [Preserve] varname(subscripts) [As type]
Preserve |
省略可能です。 |
varname |
必ず指定します。 |
subscripts |
必ず指定します。 |
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) ↓ |
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)
新着記事 ・・・新着記事一覧を見る
Excelシートの複雑な計算式を解析するVBA|VBAサンプル集(2月18日)
VBAクラスの作り方:独自Rangeっぽいものを作ってみた|VBA技術解説(2月16日)
VBAクラスの作り方:列名のプロパティを自動作成する|VBA技術解説(2月14日)
VBAクラスの作り方:列名の入力支援と列移動対応|VBA技術解説(2月11日)
クラスを使って他ブックのイベントを補足する|VBA技術解説(2月6日)
Excelアドインの作成と登録について|VBA技術解説(2月3日)
参照設定、CreateObject、オブジェクト式の一覧|VBA技術解説(1月20日)
VBAでファイルを規定のアプリで開く方法|VBA技術解説(1月20日)
ドキュメントプロパティ(BuiltinDocumentProperties,CustomDocumentProperties)|VBA技術解説(1月19日)
他ブックへのリンクエラーを探し解除|VBAサンプル集(1月15日)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数とデータ型(Dim)|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.RangeとCellsの使い方|ExcelマクロVBA入門
6.マクロって何?VBAって何?|ExcelマクロVBA入門
7.繰り返し処理(For Next)|ExcelマクロVBA入門
8.とにかく書いて見よう(Sub,End Sub)|VBA入門
9.定数と型宣言文字(Const)|ExcelマクロVBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。