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側に()を付けてみましたが上手くいきませんでした、何か良い方法があればよろしくお願いします。
> Dst(I, J) = CInt(Src(I, J))
Dst(I, J) = CInt(Src(I)(J))
だと思いますよ。Array関数を使って入れ子にした配列は
多次元配列ではなくジャグ配列になります。
>Dst(I, J) = CInt(Src(I)(J))
>だと思いますよ。Array関数を使って入れ子にした配列は多次元配列ではなくジャグ配列になります
ありがとうございました、教えていただいたとおりに修正したらちゃんと動きました。
ツイート | ![]() |