配列かIsArrayで調べ、LBoundとUBoundの要素数でループする:Access VBA
配列として宣言されているかどうか調べるにはIsArray関数を使用します。
配列を要素数でループする場合、LBoundで要素の下限とUBoundで上限を取得しループします。
ここでは2つのボタンを配置したフォームを作成します。
1つ目のボタンで、ReDimを使い配列を宣言し、値を代入します。
2つ目のボタンで、LBoundとUBoundをループで使い配列から取り出しテキストボックスに表示します。
■ ReDimを使い配列を宣言し、値を代入する
下のようなフォームを作成しました。
[配列にセット]のコマンドボタンをクリックすると、イベントで配列に代入します。
配列を宣言し代入するVBA
VBAの解説
・代入と取り出しの両方のプロシージャで使用する配列の変数を、フォームのモジュールに宣言します。
・ReDimで配列を宣言します。 通常要素の下限は0か1にしますが、ここではテストなので3にしました。
・Forループで作成した配列に値を代入します。
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
End Sub
■ LBoundとUBoundで要素の下限と上限を取得しループする
フォームに[配列から取り出し]ボタンと、取り出した値を表示するテキストボックスを配置します。
配列からデータを取り出すVBAです。
VBAの解説
・If IsArrayで配列かどうか調べます。 Falseが返れば配列でないのでプロシージャからExitで抜けます。
・Forループの開始値をLBoundでセットし、終了値をUBoundでセットしています。
Private Sub コマンド1_Click()
Dim i As Long
If IsArray(tAry) = False Then
MsgBox "配列が宣言されていません"
Exit Sub
End If
Me!テキスト2 = Null
For i = LBound(tAry) To UBound(tAry)
Me!テキスト2 = Me!テキスト2 & tAry(i) & vbCrLf
Next
End Sub
実行結果です。
要素の下限を3にしたので、配列のインデックスが3の値から表示されています。
[配列にセット]をしないで取出しを行った場合、IsArray関数で判定され実行できません。