配列の初期化をスマートに行うには?

解決


ファン太  2003-11-10 13:33:11  No: 109867  IP: [192.*.*.*]

VBで配列の宣言と初期化を同時に行えるのはVariant型だけですよね?、2組以上の二次元配列を初期化するのに同じようなコードを何度も書きたくないのでVariantからIntegerの配列にコピーする以下のようなプロシージャを作ったのですが、Variant側のアクセス時に「インデックスが有効範囲にありません」というエラーが出てしまいます。

Private Sub SetArray(Dst() As Integer, Src As Variant)
Dim I As Integer
Dim J As Integer
    For I = 0 To 2
        For J = 0 To 2
            Dst(I, J) = CInt(Src(I, J))
        Next J
    Next I
End Sub

Private Sub Command1_Click()
Dim Src As Variant
Dim Tbl(2, 2) As Integer
    Src = Array(Array(10, 20, 30), Array(11, 12, 13))
    Call SetArray(Tbl, Src)

End Sub

試しにVariant側に()を付けてみましたが上手くいきませんでした、何か良い方法があればよろしくお願いします。

編集 削除
よねKEN  2003-11-10 17:10:18  No: 109868  IP: [192.*.*.*]

> Dst(I, J) = CInt(Src(I, J))
Dst(I, J) = CInt(Src(I)(J))

だと思いますよ。Array関数を使って入れ子にした配列は
多次元配列ではなくジャグ配列になります。

編集 削除
ファン太  2003-11-10 18:10:35  No: 109869  IP: [192.*.*.*]

>Dst(I, J) = CInt(Src(I)(J))
>だと思いますよ。Array関数を使って入れ子にした配列は多次元配列ではなくジャグ配列になります

ありがとうございました、教えていただいたとおりに修正したらちゃんと動きました。

編集 削除