2次元配列の宣言の仕方について

解決


YUKI  2002-09-03 01:09:01  No: 104788

はじめまして。最近VBを習い始めた初心者です。
2次元配列を宣言したのですが、プログラムの書き方が分かりません・・・
縦にi、横にjでi,jとも何件入るか分からない時にどうやって宣言すれば
よいのでしょうか?
誰か教えてください、お願いします。


Kenji  2002-09-03 02:04:00  No: 104789

こういう場合は、動的配列を使います。
まずは、普通の配列のように宣言します。
例として、Dと名前のLong型配列にしてみます。

Dim D() As Long

配列なのですが、要素数を入力しないでおくと動的配列になります。
その後、使いたいときにRedimステートメントを使います。

例1: 1次元配列
Redim D(10)

例2: 2次元配列
Redim D(1 To 10, 1 To 20)

例3: 変数の値を要素数にする
Dim i As Long, j As Long
i = 100
j = 50
Redim D(0 To i, 0 To j)

てな感じです。
0 To とか 1 To は、インデックスの最小値の指定です。省略しても一応使えます。

Redim Preserveというのもありまして、配列の要素数を小さくしても
配列に入ったデータが保護されるようになります。

例)
Redim Preserve D(10)


YUKI  2002-09-03 05:54:22  No: 104790

KENJIさん返信ありがとうございました。
私のケースの場合、上の例3に該当するというわけですね。ということはi,jに
ある程度配列のメモリを確保しておくということでよろしいでしょうか?
この後i,jをそれぞれループの終了条件にすればいいということですね。
あっているでしょうか?
すみません・・知識不足で。。。


Kenji  2002-09-04 05:48:11  No: 104791

まあそういうことなんですが、値を固定してしまうと動的配列のうまみがなくなってしまうので。

例えば、Command1(ボタン)をクリックしたときにText1(テキストボックス)の値を追加する場合

Dim D() As String  'データ
Dim n As Long      'データ数

Private Sub Command1_Click()
    n = n + 1                 'データ数を+1する
    Redim Preserve D(1 To n)  '配列を広げる
    D(n) = Text1.Text         'データを追加
End Sub

みたいな感じにすると、クリックするたびにText1の文字が配列に追加されます。(データの数はnに代入される)
UBound関数やLBound関数など、配列の要素数を取得できる関数もありますので、ヘルプをみながら色々やってみましょう。


YUKI  2002-09-04 18:08:36  No: 104792

説明ありがとうございました。上記の例とても分かりやすかったです。
これをヒントに自分でがんばります。
Kenjiさんありがとうございました。また何かわからないことが
ありましたらお願いいたします。m(__)m


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

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






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