Home » ADO(ActiveX Data Objects)の使い方 » Recordsetで次のデータを取得する

動作検証バージョン:Windows版Excel(バージョン1821 ビルド11126.20266)+ Microsoft ActiveX Data Objects 6.1 Library

「vba recordset 次のデータ」
という検索キーワードでアクセスがありました。

ADO(ActiveX Data Objects)なのかDAO(Data Access Objects)なのか、どのライブラリかは不明ですけれど、Recordsetオブジェクトで次のデータを取得するにはどうすればいいのか、探していた方による検索です。

ここで「次のデータ」と表現されているのが何なのか、2つ考えられます。

1つは次のレコード、もう1つは次のフィールドに格納されている値です。

[スポンサードリンク]

次のレコードを取得するなら、Recordsetオブジェクトに用意されているMoveNextメソッドです。

Recordsetで次のデータを取得する

次のフィールドに格納されている値を取得するなら、Fieldsコレクションから次のFieldオブジェクトを取得します。

Recordsetで次のデータを取得する

次のデータを取得する挙動を確認するサンプルマクロ

シンプルなCSVファイルにADOで接続して、次のデータを取得する様子を確認しましょう。

この記事ではADODBを取り上げますが、DAOでも参考になるはずです。

Cドライブのtempフォルダーにsample.csvという名前のCSVファイルを用意し、参照設定の行われている環境で、以下のSubプロシージャを実行してください。

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

 rs.Close: cn.Close
 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で次のデータを取得する

Copyright © インストラクターのネタ帳 All Rights Reserved.

.