2次元配列の宣言

解決


AKIRA  2005-11-11 22:04:41  No: 127545

こんにちわ。

考え方があっているか教えてほしいのですが、動的2次元配列の宣言をする場合というのは、下記のように宣言して、あとで、Redim(Preserve)を使って配列を広げていけば良いのでしょうか?

   Dim A(1,1) As integer

一次元配列の場合は、添え字を空でよかったのですが、2次元配列だと空にできません。

  Dim A(,) As integer

これだと、コンパイルエラーに引っかかってしまいます。
皆さん、どうやっているのでしょうか?


Blue  2005-11-11 22:19:47  No: 127546

Dim A As Variant

でどうでしょうか?


Blue  2005-11-11 22:25:51  No: 127547

あ〜ダメっぽいw
忘れてください。


ひでらん  2005-11-11 22:29:49  No: 127548

普通に宣言すれば良いんじゃいですか?
こんな感じで・・・。

Dim A() As integer
Redim A(1,1)

ただ、PreserveをつけるとA(i,j)のj側しか
変更できないようなんですが・・・。
これ仕様ですかねぇ・・・


いな  2005-11-11 22:31:54  No: 127549

ん?こうじゃない?

Dim A()() As Integer


Blue  2005-11-11 22:32:57  No: 127550

というか、
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


Blue  2005-11-11 22:34:14  No: 127551

> Dim A()() As Integer
VB6ではエラーだったと。


いな  2005-11-11 22:36:30  No: 127552

orz

動的 多次元配列で検索して、未検証だっ


ひでらん  2005-11-11 22:38:20  No: 127553

>最後の次元のサイズだけを変更できます。

最後の次元だけ変更する人がいるのかなぁ。
最初の次元を変更したい人のが多いのでは・・・
と、愚痴ってみました。

この仕様にやられた事がありまして (>_<)


AKIRA  2005-11-11 22:49:25  No: 127554

回答ありがとうございます。

ありゃ。。
知らなかったけど、Redim Preserveだと、最後の次元サイズしか変更することができないんですね。

おとなしく、MAXを切るべきかもしれないです。

うーん。もうちょっと悩んでみます。


ガッ  2005-11-11 22:50:43  No: 127555

…ん、構造体はだめなのかな?


AKIRA  2005-11-11 22:54:29  No: 127556

あっ。。。

そっか.

構造体でも同じことできるじゃん。
思いつかなかったです。

ガッさん。ありがとうございます。

ちょっと試してみます。


AKIRA  2005-11-11 23:04:35  No: 127557

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


もげ  2005-11-11 23:34:05  No: 127558

単なる思い付きですが、MS(H)FlexGridにいれちゃうとか...
TextMatrix()で...


会社合併><  2005-11-11 23:41:30  No: 127559

いあ、デバッグかけて止まった所が間違っていますょ^^;
それも滅茶苦茶わかりやすく間違ってます><
がんばっ!


Take1  2005-11-11 23:50:03  No: 127560

ちょっと気が突いた事だけ・・・
もし同じモジュール内なら
Type testType→Private Type testType
あと
counter = coutner + 1→counter = counter + 1
ReDim A(0) As Integer→ReDim A(0) As testType


AKIRA  2005-11-11 23:55:54  No: 127561

はっ!
・・・す。す。すいません。
直したらすんなりできたっす。

皆さんのおかげで、解決しました。
ありがとうございます。m(_ _)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加