はじめまして。最近VBを習い始めた初心者です。
2次元配列を宣言したのですが、プログラムの書き方が分かりません・・・
縦にi、横にjでi,jとも何件入るか分からない時にどうやって宣言すれば
よいのでしょうか?
誰か教えてください、お願いします。
こういう場合は、動的配列を使います。
まずは、普通の配列のように宣言します。
例として、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)
KENJIさん返信ありがとうございました。
私のケースの場合、上の例3に該当するというわけですね。ということはi,jに
ある程度配列のメモリを確保しておくということでよろしいでしょうか?
この後i,jをそれぞれループの終了条件にすればいいということですね。
あっているでしょうか?
すみません・・知識不足で。。。
まあそういうことなんですが、値を固定してしまうと動的配列のうまみがなくなってしまうので。
例えば、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関数など、配列の要素数を取得できる関数もありますので、ヘルプをみながら色々やってみましょう。
説明ありがとうございました。上記の例とても分かりやすかったです。
これをヒントに自分でがんばります。
Kenjiさんありがとうございました。また何かわからないことが
ありましたらお願いいたします。m(__)m
ツイート | ![]() |