こんにちわ。
考え方があっているか教えてほしいのですが、動的2次元配列の宣言をする場合というのは、下記のように宣言して、あとで、Redim(Preserve)を使って配列を広げていけば良いのでしょうか?
Dim A(1,1) As integer
一次元配列の場合は、添え字を空でよかったのですが、2次元配列だと空にできません。
Dim A(,) As integer
これだと、コンパイルエラーに引っかかってしまいます。
皆さん、どうやっているのでしょうか?
Dim A As Variant
でどうでしょうか?
あ〜ダメっぽいw
忘れてください。
普通に宣言すれば良いんじゃいですか?
こんな感じで・・・。
Dim A() As integer
Redim A(1,1)
ただ、PreserveをつけるとA(i,j)のj側しか
変更できないようなんですが・・・。
これ仕様ですかねぇ・・・
ん?こうじゃない?
Dim A()() As Integer
というか、
Dim A() As Integer
でよかったです。
ただし、
ReDim Preserve
は
> 次元が 2 つ以上ある配列の場合に Preserve キーワードを指定すると、最後の次元のサイズだけを変更できます。
MSDN
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vblr7/html/vastmReDim.asp
> Dim A()() As Integer
VB6ではエラーだったと。
orz
動的 多次元配列で検索して、未検証だっ
>最後の次元のサイズだけを変更できます。
最後の次元だけ変更する人がいるのかなぁ。
最初の次元を変更したい人のが多いのでは・・・
と、愚痴ってみました。
この仕様にやられた事がありまして (>_<)
回答ありがとうございます。
ありゃ。。
知らなかったけど、Redim Preserveだと、最後の次元サイズしか変更することができないんですね。
おとなしく、MAXを切るべきかもしれないです。
うーん。もうちょっと悩んでみます。
…ん、構造体はだめなのかな?
あっ。。。
そっか.
構造体でも同じことできるじゃん。
思いつかなかったです。
ガッさん。ありがとうございます。
ちょっと試してみます。
VB6だと、以下のエラーが出てコンパイルがとおりませんでした。
「配列要素のデータ型を変更することができませんでした。」
以下がテストコードです。
Type testType
ID As Integer
ID2 As Integer
End Type
Private A() As testType
Private counter As Integer
Private Sub Command1_Click()
counter = coutner + 1
ReDim Preserve A(counter)
A(counter).ID = counter
A(counter).ID2 = counter
End Sub
Private Sub Form_Load()
ReDim A(0) As Integer
counter = 0
A(0).ID = counter
A(0).ID2 = counter
End Sub
単なる思い付きですが、MS(H)FlexGridにいれちゃうとか...
TextMatrix()で...
いあ、デバッグかけて止まった所が間違っていますょ^^;
それも滅茶苦茶わかりやすく間違ってます><
がんばっ!
ちょっと気が突いた事だけ・・・
もし同じモジュール内なら
Type testType→Private Type testType
あと
counter = coutner + 1→counter = counter + 1
ReDim A(0) As Integer→ReDim A(0) As testType
はっ!
・・・す。す。すいません。
直したらすんなりできたっす。
皆さんのおかげで、解決しました。
ありがとうございます。m(_ _)m
ツイート | ![]() |