Home » ADO(ActiveX Data Objects)の使い方 » Recordsetの列数・フィールドの数を取得する

Recordsetの列数・フィールドの数を取得する

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

「vba recordset 列数」
という検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。

どのアプリケーションかわかりませんが、Recordsetオブジェクトの列数・フィールドの数を取得するには、どのようなコードを書けばいいのか探していらしたのでしょう。

[スポンサードリンク]

Recordsetの列数を取得するサンプルマクロ

Cドライブのtempフォルダーに、sample.csvという名前のCSVファイルを準備して、以下のSubプロシージャを実行すると、CSVファイルのフィールドの数がメッセージボックスに表示されます。

このSubプロシージャは、CSVファイルにADOを使って接続しているだけですから、AccessやExcelはもちろん、PowerPointやWordでも動きます。

Sub Recordsetの列数を取得する()
 Dim f_path As String: f_path = "C:\temp\"
 Dim f_name As String: f_name = "sample.csv"
 
 Dim cn As Object 'ADODB.Connection
 Set cn = CreateObject("ADODB.Connection")
 cn.Open _
   "Provider=Microsoft.Jet.OLEDB.4.0;" & _
   "Data Source=" & f_path & ";" & _
   "Extended Properties='Text; HDR=NO'"

 Dim rs As Object 'ADODB.Recordset
 Set rs = cn.Execute("SELECT * FROM " & f_name)

 MsgBox rs.Fields.Count

 rs.Close: cn.Close
 Set rs = Nothing: Set cn = Nothing
End Sub

上記のとおり、FieldsコレクションのCountプロパティで
  MsgBox rs.Fields.Count
Recordsetの列数を取得できます。

ローカルウィンドウでRecordsetオブジェクトの中身を見てみましょう

拙著『いちばんやさしいExcel VBAの教本』で、多用しているローカルウィンドウで、オブジェクト変数rsの中身を覗いてみることをおすすめします。

上記のSubプロシージャで、Recordsetオブジェクトの格納を行っている
  Set rs = cn.Execute("SELECT * FROM " & f_name)
の直後、
  MsgBox rs.Fields.Count
でブレークポイントを設定してから、ショートカットキー[F5]で実行してみましょう。

中断モードになったらメニュー[表示]-[ローカルウィンドウ]で、ローカルウィンドウを表示します。

上図のような状態になっているはずですので、オブジェクト変数rsの前に表示されている[+]をクリックして、下図のように展開してください。

更に、Fieldsコレクションの前の[+]をクリックすると、上記のSubプロシージャで利用しているFieldsコレクションのCountプロパティを、下図のとおり見ることができます。

※上図はCSVファイルにフィールドが3つだけある状態です。

Recordsetオブジェクトは、レコードのかたまりを表すオブジェクトでありながら、個々のレコードを表す部分もあって、全体像をイメージし辛いので、ローカルウィンドウで中身を覗き見て、何度もイメージしてみることをおすすめします。

最終更新日時:2018-12-11 14:48

[スポンサードリンク]

Home » ADO(ActiveX Data Objects)の使い方 » Recordsetの列数・フィールドの数を取得する

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

.