投稿日 | : 2006/02/10(Fri) 12:43 |
投稿者 | : demontaki |
URL | : |
タイトル | : Re^3: 動的に2次元配列 |
> Preserve は配列の最後の次元の要素数を変更する場合に使用する(Helpに書いてある)
> 配列の第一要素を変換したい場合
> arr(10, 5)
> どうしたらいいでしょうか。
> よろしくお願いします.
どうもdemontakiです。
この場合にはReDimで単純に処理することはできません
その理由としてはヘルプに以下のように書かれているためです。
--ヘルプより引用
キーワード Preserve を指定した場合、変更できるのは、動的配列の最後の次元のサイズに限られま
す。また、次元数は変更できません。
引用終わり--
上記の記述により2次元配列であれば1次元目のサイズを変更することはできません
したがってこの場合の対処として下記のような方法が考えられます。
なお、ソースはgtさんのものを流用させていただきます。
Dim arr() As Variant
Dim arr_Conv() As Variant 'コンバート用の配列を用意します。
Dim i As Integer
ReDim arr(2, 0)
arr(0, 0) = "a"
arr(1, 0) = "b"
arr(2, 0) = "c"
ReDim Preserve arr(2, 3) 'エラーが起きない
For i = 0 To 3
arr(0, i) = "a" & i
arr(1, i) = "b" & i
arr(2, i) = "c" & i
Next
ReDim Preserve arr(2, 5) 'エラーが起きない
For i = 0 To 5
arr(0, i) = "a" & i
arr(1, i) = "b" & i
arr(2, i) = "c" & i
Next
ReDim arr_Conv(10, 5) 'コンバート用の配列を目的のサイズに設定します。
arr_Conv() = arr() '基となる配列をコンバート用の配列に移動させます。
ReDim arr(10, 5) 'キーワード Preserveを付けていないため目的のサイズに変更できます。
arr() = arr_Conv() 'コンバート用の配列から基の配列にデータを戻します。
といった感じでしょうかね?
ポイントしてはPreserveを使用せずにサイズを変更するということです。
これで解決できますよね?
以上