動的に配列を作成しテーブル(クエリ)のデータを格納する : Access VBA




BackHome BackTips Backメニュー

動的に作成した二次元配列に、レコードセットでテーブル(クエリ)を開き、ループで格納します。

動的に二次元配列を作成するには、Dim vArray() As Variant と始めに宣言し、ReDim vArray(要素数1, 要素数2)のように変更します。
変更する要素数1は「全レコード数-1」にしています。 -1にしているのは、配列の開始が「0」からのためです。
全レコード数はRecordCountで取得できます。 詳しくは「Recordsetでレコード数を取得」を参照してください。

■作成手順
使用する顧客テーブルです。
顧客テーブル

リボンの[作成]~[マクロとコード」グループの[標準モジュール]をクリックし、Module内に作成します。
[マクロとコード」グループの[標準モジュール]をクリックする

■ Access VBA 実行コード

下画像のようにModule1に、MyReadTableプロシージャを作成しました。
Module1に作成したMyReadTableプロシージャ

Option Compare Database

Sub MyReadTable()
    Dim rs As Recordset
    Dim vArray() As Variant
    Dim i As Long
   
    Set rs = CurrentDb.OpenRecordset("T-顧客")
    ReDim vArray(rs.RecordCount - 1, 2)
    i = 0
   
    Do Until rs.EOF
        vArray(i, 0) = rs(0)
        vArray(i, 1) = rs(1)
        vArray(i, 2) = rs(2)
        rs.MoveNext
        
        Debug.Print vArray(i, 0) & " : " & _
            vArray(i, 1) & " : " & vArray(i, 2)
        i = i + 1
    Loop
    Set rs = Nothing

End Sub

■ Access実行画面

イミディエイトウィンドウに、動的に作成した配列のテーブルのデータが表示されています。
イミディエイトウィンドウにテーブルのデータが表示された

■ クエリを開く場合
クエリを使用する場合、OpenRecordsetで開いた時点では正確なレコード総数を取得できません。
その為、MoveLastを実行し最終レコードまで移動させレコード総数を取得します。
最終レコード位置のままでは、ループで最初から読めないのでMoveFirstで先頭レコードに移動します。

Option Compare Database

Sub MyReadTable()
    Dim rs As Recordset
    Dim vArray() As Variant
    Dim i As Long
   
    Set rs = CurrentDb.OpenRecordset("Q-顧客")
    rs.MoveLast
    ReDim vArray(rs.RecordCount - 1, 2)
    rs.MoveFirst
    i = 0
   
    Do Until rs.EOF
        vArray(i, 0) = rs(0)
        vArray(i, 1) = rs(1)
        vArray(i, 2) = rs(2)
        rs.MoveNext
        
        Debug.Print vArray(i, 0) & " : " & _
            vArray(i, 1) & " : " & vArray(i, 2)
        i = i + 1
    Loop
    Set rs = Nothing
End Sub

BackHome BackTips Backメニュー

Copyright(C) FeedSoft