レコードの内容を二次元配列に格納する GetRows メソッド

レコードの内容を二次元配列に格納する GetRows メソッド

Sub レコード取得()
'レコードの内容を二次元配列へ格納する
Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset
Dim FileName As String
Dim tmpRecCnt As Long, tmpFldCnt As Integer, myArray() As Variant
FileName = ThisWorkbook.Path & "\mdb\2-sampleDB.mdb"
myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FileName
myRS.Open "社員", myCon, adOpenStatic, adLockReadOnly

'フィールド数とレコード数を取得
tmpFldCnt = myRS.Fields.Count
tmpRecCnt = myRS.RecordCount

'二次元配列を再定義
ReDim myArray(tmpFldCnt - 1, tmpRecCnt - 1)
'レコードセットの内容を変数に格納
myArray = myRS.GetRows
'シートに転記
Range(Cells(1, 1), Cells(tmpFldCnt, tmpRecCnt)) = myArray

'二次元配列にどのように格納されているか確認する
Dim i As Integer, j As Integer, tmpRecStr As String
For i = 0 To tmpFldCnt - 1
  For j = 0 To tmpRecCnt - 1
    tmpRecStr = tmpRecStr & myArray(i, j) & " : "
  Next
    Debug.Print "tmpFldCnt = " & i + 1
    Debug.Print Mid(tmpRecStr, 1, Len(tmpRecStr) - 3)
    tmpRecStr = ""
Next

myRS.Close: Set myRS = Nothing
myCon.Close: Set myCon = Nothing

End Sub

レコードセットオブジェクトの内容を二次元配列に格納
変数 = Recordset オブジェクト.GetRows

配列には(フィールド情報,データ)の様に格納される。
イメージとしては、テーブルの行と列を入れ換えたように格納される。

「社員」テーブル

実行結果

実行結果その2
 二次元配列にどのように格納されているか確認するの部分の結果

イミディエイトウィンドウ

tmpFldCnt = 1
018 : 024 : 025 : 032 : 048 : 050 : 051 : 052
tmpFldCnt = 2
古川 順平 : 増田 洋己 : 星野 圭太 : 宮崎 洋平 : 前田 研治 : 佐野 博之 : 矢部 剛史 : 小鍋
靖幸
tmpFldCnt = 3
フルカワ ジュンペイ : マスダ ヒロキ : ホシノ ケイタ : ミヤザキ ヨウヘイ : マエダ ケンジ : サノ
ヒロユキ : ヤベ タケフミ : オナベ
ヤスユキ
tmpFldCnt = 4
42 : 31 : 26 : 25 : 33 : 29 : 32 : 29
tmpFldCnt = 5
営業2課 : 営業1課 : 営業2課 : 営業2課 : 営業1課 : 営業1課 : 営業2課 : 営業1課

Recordsetオブジェクトの複数のレコードを配列に取り込みます。
array = recordset.GetRows( Rows, Start, Fields )

バリアント型 (Variant) の二次元配列の値を返します。

引数
Rows 省略可能です。取得するレコード数を示すGetRowsOptionEnum 値を指定します。既定値はadGetRowsRest です。
Start 省略可能です。GetRows操作を開始するレコードのブックマークを評価する文字列型(String) またはバリアント型 (Variant)の値を指定します。BookmarkEnum値を使用することもできます。
Fields 省略可能です。単一のフィールド名または位置を表すバリアント型(Variant)の値、あるいは複数のフィールド名または位置を表す値の並びをバリアント型(Variant)の配列として指定します。指定したフィールドのデータのみが返されます。

GetRows メソッドでは、Recordset のレコードを二次元配列にコピーします。最初の添え字でフィールドを指定し、2 番目でレコード番号を指定します。GetRows メソッドからデータが返されると、変数 array
は自動的に正しいサイズに調整されます。

Rows 引数の値を指定しない場合は、Recordset
オブジェクトのすべてのレコードが取り込まれます。利用可能なレコード数よりも大きい値を指定した場合は、利用可能なレコード数のみが返されます。

ブックマークをサポートする Recordset
オブジェクトの場合、Start 引数にレコードの
Bookmark プロパティの値を指定すると、GetRows
メソッドでデータの取得を開始するレコードを指定できます。

GetRows
メソッドで返すフィールドを限定する場合は、Fields
引数に、単一のフィールド名または番号、あるいは、複数のフィールド名または番号の配列を指定します。

GetRows
メソッドを呼び出すと、まだ読み込まれていない次のレコードがカレント
レコードになります。レコードがそれ以上存在しない場合は、EOF
プロパティが True に設定されます。