配列からデータを順に取り出す場合、要素数を調べなくてもFor Each Nextのループを使えば簡単にできます。
前回LBoundとUBoundで要素数を取得し取り出す方法を掲載しましたが、順に取り出すなら今回の方法で実行できます。
ここでは2つのボタンとテキストボックスを配置したフォームを作成します。
1つ目のボタンで、ReDimを使い配列を宣言し、値を代入します。
2つ目のボタンで、IsArray関数を使い配列かどうか調べ、配列ならばFor Each Nextで順に取り出したデータをテキストボックスに表示します。
今回のポイントは、For Eachステートメントでデータの受取りに使う変数は、バリアント型かオブジェクト型で指定することです。
■ 配列に数値と文字列を代入する
下のようなフォームを作成しました。
[配列にセット]のコマンドボタンを選択し、プロパティのイベントプロシージャを選択します。
配列に数値と文字列を代入するVBA
VBAの解説
・配列に使用する変数を、フォームモジュール部分に宣言します。
・ReDimで配列を確保します。 要素は3から5にしました。
・Forループで3から9は数値、10から15は文字列を代入します。
Private tAry As Variant
Private Sub コマンド0_Click()
Dim i As Long
ReDim tAry(3 To 15)
For i = 3 To 15
tAry(i) = i * 10
Next
For i = 10 To 15
tAry(i) = "AAA " & i & " BBB"
Next
End Sub
■ For Each Nextのループで配列から取り出す
フォームにテキストボックスとボタンを配置し、ボタンにプロパティのイベントプロシージャを設定します。
配列からFor Each Nextのループでデータを取り出すVBAです。
VBAの解説
・最初に[配列にセット]ボタンが押されていないとエラーになるので、IsArrayで配列かどうか調べます。
・取り出したデータを格納する変数はバリアント型にします。 そうでない場合は「For Eachに指定する変数はバリアント型またはオブジェクト型でなければなりません。」とエラーメッセージが表示されます。
・For Each Nextのループでデータを取り出し、テキストボックスに代入していきます。
Private Sub コマンド1_Click()
Dim i As Long
Dim v As Variant
If IsArray(tAry) = False Then
MsgBox "配列が宣言されていません"
Exit Sub
End If
Me!テキスト2 = Null
For Each v In tAry
Me!テキスト2 = Me!テキスト2 & v & vbCrLf
Next
End Sub
実行結果です。
配列にセットした数値と文字列が取出され表示できました。