「vba recordset 次のデータ」
という検索キーワードでアクセスがありました。
ADO(ActiveX Data Objects)なのかDAO(Data Access Objects)なのか、どのライブラリかは不明ですけれど、Recordsetオブジェクトで次のデータを取得するにはどうすればいいのか、探していた方による検索です。
ここで「次のデータ」と表現されているのが何なのか、2つ考えられます。
1つは次のレコード、もう1つは次のフィールドに格納されている値です。
次のレコードを取得するなら、Recordsetオブジェクトに用意されているMoveNextメソッドです。
次のフィールドに格納されている値を取得するなら、Fieldsコレクションから次のFieldオブジェクトを取得します。
次のデータを取得する挙動を確認するサンプルマクロ
シンプルなCSVファイルにADOで接続して、次のデータを取得する様子を確認しましょう。
この記事ではADODBを取り上げますが、DAOでも参考になるはずです。
Cドライブのtempフォルダーにsample.csvという名前のCSVファイルを用意し、参照設定の行われている環境で、以下のSubプロシージャを実行してください。
Dim f_path As String: f_path = "C:\temp\"
Dim f_name As String: f_name = "sample.csv"
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & f_path & ";" & _
"Extended Properties='Text; HDR=No'"
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open _
Source:="SELECT * FROM " & f_name, _
ActiveConnection:=cn, _
CursorType:=adOpenStatic
Stop
Do Until rs.EOF
Dim var As Variant
Dim fld As ADODB.Field
For Each fld In rs.Fields
var = fld.Value
Next fld
rs.MoveNext
Loop
Set rs = Nothing: Set cn = Nothing
End Sub
サンプルマクロで確認すべきこと
上記のSubプロシージャで、
次のレコードを取得するのに関係しているのが、
Do Until rs.EOF
Dim var As Variant
Dim fld As ADODB.Field
For Each fld In rs.Fields
var = fld.Value
Next fld
rs.MoveNext
Loop
Do~Loop文です。
次のフィールドに格納されている値を取得しているのが、先のDo~Loop文の内側の、
Do Until rs.EOF
Dim var As Variant
Dim fld As ADODB.Field
For Each fld In rs.Fields
var = fld.Value
Next fld
rs.MoveNext
Loop
For Each~Next文です。
Stopステートメントで、中断モードになったら、拙著『いちばんやさしいExcel VBAの教本』でも多用しているローカルウィンドウを、VBEのメニュー[表示]-[ローカルウィンドウ]から表示して、変数varの中身を確認しながらショートカットキー[F8]でステップ実行しましょう。
Stop
Do Until rs.EOF
Dim var As Variant
Dim fld As ADODB.Field
For Each fld In rs.Fields
var = fld.Value
Next fld
rs.MoveNext
Loop
最終更新日時:2019-01-30 02:53
Home » ADO(ActiveX Data Objects)の使い方 » Recordsetで次のデータを取得する