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
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
先ほど消えていた内容が今回は維持されています!
困っていた方は解決できていれば幸いです。