【Access】ReDim Preserveを使用して動的配列を操作する

スポンサーリンク

Accessで配列を使用する場合は、ReDim Preserveを使用します。
これは動的配列の場合に非常に便利です。

手法としては、データ件数分の配列を用意してそこに値を格納していく時に用います。
主に帳票操作等の時に使用することが多いように思います。

スポンサーリンク

通常の配列

配列ボタンのイベントに下記のVBAコードを書きます。

Dim lngDelIdx() As String

' 配列のサイズを変更し、要素を消去します。
ReDim lngDelIdx(10)
lngDelIdx(0) = "a"
lngDelIdx(1) = "b"
lngDelIdx(2) = "c"
lngDelIdx(3) = "d"
lngDelIdx(4) = "e"
lngDelIdx(5) = "f"
lngDelIdx(6) = "g"
lngDelIdx(7) = "h"
lngDelIdx(8) = "i"
lngDelIdx(9) = "j"
lngDelIdx(9) = "k"

' 配列のサイズを変更し、要素を消去します。
ReDim lngDelIdx(5)
lngDelIdx(0) = "0"
lngDelIdx(1) = "1"
lngDelIdx(2) = "2"
lngDelIdx(3) = "3"
lngDelIdx(4) = "4"
lngDelIdx(5) = "5"

こちらのコードをデバッグしてみます。

デバッグ1

■ReDim lngDelIdx(10)まで実行

→ReDim lngDelIdx(10)を実行した後です。
ウォッチウィンドウにlngDelIdx(0)~(10)まで配列変数が追加されました。

lngDelIdx(11)=”あいうえお”

といれるとインデックスエラーになりますが、lngDelIdx(0)~lngDelIdx(10)までの配列変数に
値をいれることができるようになりました。

デバッグ2

ステップ実行していきます。
■lngDelIdx(0) = “a”まで実行

→lngDelIdx(0)に値が入っているのがわかると思います。

デバッグ3

■lngDelIdx(9) = “k” まで実行

→lngDelIdx(0)~lngDelIdx(9)までに値が入っています。

デバッグ4

→コメントのとおりですが、ReDim lngDelIdx(5)では、今までセットしていたデータが消去されます。

デバッグ5

→そして新たに値がセットされます。

やりたい事によっては活用できますが
元のデータが消えると嫌な場合と問題ない場合があります。
仕様通りに変数が使えているかウォッチしながら確認すると良いと思います。

動的配列(ReDim Preserve)

ReDim Preserveを使用すると配列の要素をループしながら追加していき
必要な分だけ配列を追加しつつ、元の値を残すということが可能です。

Dim lngDelIdx() As String

' 配列のサイズを変更し、要素を消去します。
ReDim lngDelIdx(5)
lngDelIdx(0) = "0"
lngDelIdx(1) = "1"
lngDelIdx(2) = "2"
lngDelIdx(3) = "3"
lngDelIdx(4) = "4"
lngDelIdx(5) = "5"

' 配列のサイズを変更し、要素は消去しません。
ReDim Preserve lngDelIdx(10)
lngDelIdx(6) = "6"

このようにすると、どうなるでしょうか。

デバッグ6

紫枠の要素が追加されましたが、元の0~5の変数の値は残っています。

ループしながら必要な要素だけ追加していき動的配列を使うことができます。
固定で(10)としておいても、件数によって15になった時にインデックスエラーにならないように
予め対処することができます。

動的配列の初期化(Erase)

配列を初期化したい場合は、Eraseを使用します。
lngDelIdx = “”
とするとerrorになります。

' 配列の初期化
Erase lngDelIdx

初期化されました。

コメント

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