レコードの内容を二次元配列に格納する 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 に設定されます。