Home » エクセルマクロ・Excel VBAの使い方 » 配列 » VBAのReDim Preserveとは

対象:Excel2007, Excel2010, Excel2013

「excel vba 配列 redim preserve」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

VBA(Visual Basic for Applications)の、動的配列の再宣言を行うReDimステートメントで見かけることのある、「Preserve」という語句について調べている方による検索です。

[スポンサード リンク]

Preserveとは

Preserveキーワードについて一言でまとめるなら以下のとおりです。


▼Preserveとは
配列に格納されている値を残したまま、配列の最後の次元の要素数を変更するために、ReDim文の中で使用するキーワード

Preserveの動作を確認するサンプルマクロ

解説をただ読むよりも、実際にマクロを動かして配列変数の中身を確認するほうが、理解が早いでしょう。


Sub Preserveの動作を確認する()

 Dim arr() As String

 ReDim arr(2)
 arr(0) = "あ"
 arr(1) = "い"
 arr(2) = "う"
 Stop

 ReDim Preserve arr(3)
 arr(3) = "え"
 Stop

 ReDim arr(4)
 arr(4) = "お"
 Stop

End Sub

サンプルマクロの解説

上記のマクロを実行すると、Stop文の箇所で中断されステップ実行モードになります。

ステップ実行の状態でメニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示して、配列変数・arrの中に何が代入されているのかを確認しましょう。

1つ目のStop文、
 ReDim arr(2)
 arr(0) = "あ"
 arr(1) = "い"
 arr(2) = "う"
 Stop
で中断されたときに、ローカルウィンドウを確認すると、下図のようになっているはずです。

VBAのReDim Preserveとは

配列・arr(0)からarr(2)に「あ」「い」「う」が格納されていることを確認したら、ショートカットキー[F5]で実行を継続しましょう。

2つ目のStop文、
 ReDim Preserve arr(3)
 arr(3) = "え"
 Stop
で中断されたときは、下図のようになっているはずです。

VBAのReDim Preserveとは

先の「あ」「い」「う」につづいて、arr(3)に「え」が格納されています。

ReDim Preserveで、元の値を残したまま、配列の要素数を増やして、
 ReDim Preserve arr(3)
その増やした配列の要素に「え」を代入したとおりの結果になっています。
 arr(3) = "え"

このことを確認したら再度ショートカットキー[F5]で実行を継続です。

3つ目のStop文、
 ReDim arr(4)
 arr(4) = "お"
 Stop
で中断されたときは、下図のようになっているはずです。

VBAのReDim Preserveとは

arr(4)には「お」が代入されていますが、arr(0)~arr(3)は「""」(空白文字列)になっています。
 ReDim arr(4)
で、配列の要素を増やしたときに、Preserveキーワードがついていないために元の値は削除されて、つづく、
 arr(4) = "お"
の代入によってarr(4)に「お」だけが格納された状態になっています。

先の、
 ReDim Preserve arr(3)
のときには、元々格納されていたデータが残り、
 ReDim arr(4)
ではデータは残っていません。


▼Preserveとは
配列に格納されている値を残したまま、配列の最後の次元の要素数を変更するために、ReDim文の中で使用するキーワード

これが、Preserveキーワードの役割です。

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » VBAのReDim Preserveとは

[スポンサード リンク]
[スポンサード リンク]

TrackBack:1

TrackBack URL
VBAで配列のインデックス・添字の最小値を1にずらす from インストラクターのネタ帳
Excel VBAで配列にする変数をVariantで宣言しておくと、ReDim Preserve文を使って、インデックス・添字の最小値を1始まりにずらすこ...

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » VBAのReDim Preserveとは

「配列」の記事一覧

検索

最近じっくりと読まれている記事

.