プログラミング

【対処法】ReDimを使うと配列の中身が消えてしまう。

VBAにおいて動的配列を使う際にReDimを行いますが,普通にやってしまうと
それまで入っていたデータが消えてしまいます。

そんな時には『ReDim Preserve』を利用しましょう。

現象の再現

Sub test()

 Dim testArray
 ReDim testArray(1, 2)

 testArray(1, 1) = "A"
 testArray(1, 2) = "B"

 MsgBox ("(1,1) = " & testArray(1, 1) & vbLf & _
         "(1,2) = " & testArray(1, 2))
 ReDim testArray(1, 3)

 testArray(1, 3) = "C"

 MsgBox ("(1,1) = " & testArray(1, 1) & vbLf & _
         "(1,2) = " & testArray(1, 2) & vbLf & _
         "(1,3) = " & testArray(1, 3))

End Sub
まずは値を代入
ReDim後に消えている

2度目のReDimをする前に設定した値は消えていますね。
ではここで冒頭に紹介した『ReDim Preserve』を使ってみましょう。

Sub test()

 Dim testArray
 ReDim testArray(1, 2)

 testArray(1, 1) = "A"
 testArray(1, 2) = "B"

 MsgBox ("(1,1) = " & testArray(1, 1) & vbLf & _
        "(1,2) = " & testArray(1, 2))
 ReDim Preserve testArray(1, 3)

 testArray(1, 3) = "C"

 MsgBox ("(1,1) = " & testArray(1, 1) & vbLf & _
         "(1,2) = " & testArray(1, 2) & vbLf & _
         "(1,3) = " & testArray(1, 3))

End Sub
ReDim Preserveにより値が維持されている

先ほど消えていた内容が今回は維持されています!

困っていた方は解決できていれば幸いです。

-プログラミング