VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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を使用せずにサイズを変更するということです。
これで解決できますよね?

以上


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -