|
▼初心者さっち さん:
>ReDim Preserve Sou_adr(i)
>理解できました!!
>
>が、Preserveを書かずにReDim Sou_adr(i)と記述すると、
>10のみが表示されます。これは、iが初期されていき、最終的に
>10がindex値になるからでしょうか。
初期化されるのは、i ではなく、Sou_adr配列のほうですね。
10は、index値の最大値です。UBound関数で取得できます。
もう1回サンプルを書いてみます。
本題の質問はkanabunさんのコードのほうが、遥かにわかり易いですので、
そちらを参考にしてください。
Sub Sample2()
Dim i As Integer
Dim cnt As Integer 'カウンターの意
Dim buf() As Variant
Dim v As Variant
'初期化
ReDim buf(0): cnt = 0
v = Array("A", "B", "C", "D", "E")
For i = 0 To UBound(v)
'現在の配列を初期化せずに、要素数を変更する
ReDim Preserve buf(cnt)
buf(cnt) = v(i)
'使ったので、カウンターを+1する
cnt = cnt + 1
'中身を表示
MsgBox Join(buf, " , ") & vbCr & _
"配列の要素 " & LBound(buf) & " 〜 " & UBound(buf)
Next
'index 1 の中身を表示
MsgBox "buf(1)= " & buf(1)
MsgBox "Preserveが無いと、配列の中身が初期化される"
ReDim buf(UBound(buf))
MsgBox Join(buf, " , ") & vbCr & _
"配列の要素 " & LBound(buf) & " 〜 " & UBound(buf)
'index 1 の中身を表示
MsgBox "buf(1)= " & buf(1)
'要らなくなったら、開放する
Erase v
Erase buf
End Sub
|
|