Home » ADOの使い方 » Recordsetで次のデータを取得する

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

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

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

ADOなのかDAOなのか、どのライブラリかは不明ですけれど、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 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
の部分です。

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の使い方 » Recordsetで次のデータを取得する

TrackBack:0

TrackBack URL

Home » ADOの使い方 » Recordsetで次のデータを取得する

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

.