配列からFor Each Nextのループを使いデータを取り出す:Access VBA

配列からデータを順に取り出す場合、要素数を調べなくてもFor Each Nextのループを使えば簡単にできます。

前回LBoundとUBoundで要素数を取得し取り出す方法を掲載しましたが、順に取り出すなら今回の方法で実行できます。

ここでは2つのボタンとテキストボックスを配置したフォームを作成します。

1つ目のボタンで、ReDimを使い配列を宣言し、値を代入します。

2つ目のボタンで、IsArray関数を使い配列かどうか調べ、配列ならばFor Each Nextで順に取り出したデータをテキストボックスに表示します。

今回のポイントは、For Eachステートメントでデータの受取りに使う変数は、バリアント型かオブジェクト型で指定することです。




BackHome BackTips Backメニュー

■ 配列に数値と文字列を代入する

下のようなフォームを作成しました。
[配列にセット]のコマンドボタンを選択し、プロパティのイベントプロシージャを選択します。
フォームを作成する

配列に数値と文字列を代入するVBA
配列に数値と文字列を代入する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です。
配列から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

実行結果です。
配列にセットした数値と文字列が取出され表示できました。
配列にセットした数値と文字列が取出され表示できた

BackHome BackTips Backメニュー

Copyright(C) FeedSoft