動的に作成した二次元配列に、レコードセットでテーブル(クエリ)を開き、ループで格納します。
動的に二次元配列を作成するには、Dim vArray() As Variant と始めに宣言し、ReDim vArray(要素数1, 要素数2)のように変更します。
変更する要素数1は「全レコード数-1」にしています。 -1にしているのは、配列の開始が「0」からのためです。
全レコード数はRecordCountで取得できます。 詳しくは「
Recordsetでレコード数を取得」を参照してください。
■作成手順
使用する顧客テーブルです。
リボンの[作成]~[マクロとコード」グループの[標準モジュール]をクリックし、Module内に作成します。
■ Access VBA 実行コード
下画像のように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