宣言 ReDim_Preserve記述間違えが多いFor~Next文

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

Option Explicit


Private Sub ReDimPreserve()
'***************************************************************
'ReDim_Preserveの使い方(For~Next)
'***************************************************************

Dim Testi As Integer
Dim TestPreserve() As String
Dim i As Integer

i = 0 '初期化

For Testi = 1 To 10
    ReDim Preserve TestPreserve(i)
    TestPreserve(i) = Testi * 10
    i = i + 1 '<<********
Next Testi

'※For Each ~ In ~ Next ~も同じです。

'値をテストする
Dim str As String
For Testi = LBound(TestPreserve) To UBound(TestPreserve)
    str = str & Testi & vbTab & TestPreserve(Testi) & vbCr
Next Testi

MsgBox str

str = ""
Erase TestPreserve '一旦配列開放

'間違えた使い方------------------------------------
'<配列数と要素がずれてしまう例 1 >
i = 0 '初期化

For Testi = 1 To 5
    i = i + 1 '<<********
    ReDim Preserve TestPreserve(i)
    TestPreserve(i) = Testi * 10
Next Testi

For Testi = LBound(TestPreserve) To UBound(TestPreserve)
    str = str & Testi & vbTab & TestPreserve(Testi) & vbCr
Next Testi

MsgBox str
'-------------------------------------------------------------
str = ""
Erase TestPreserve '一旦配列開放

'間違えた使い方------------------------------------
'<配列数と要素がずれてしまう例 2 >

i = 0 '初期化
    ReDim Preserve TestPreserve(i) '<<********

For Testi = 1 To 5
    TestPreserve(i) = Testi * 10
    i = i + 1 '<<********
    ReDim Preserve TestPreserve(i)
Next Testi

For Testi = LBound(TestPreserve) To UBound(TestPreserve)
    str = str & Testi & vbTab & TestPreserve(Testi) & vbCr
Next Testi

MsgBox str
'-------------------------------------------------------------
End Sub

 

2000年01月01日|[VBサンプルコード]:[宣言]