「vba recordset 列数」
という検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。
どのアプリケーションかわかりませんが、Recordsetオブジェクトの列数・フィールドの数を取得するには、どのようなコードを書けばいいのか探していらしたのでしょう。
Recordsetの列数を取得するサンプルマクロ
Cドライブのtempフォルダーに、sample.csvという名前のCSVファイルを準備して、以下のSubプロシージャを実行すると、CSVファイルのフィールドの数がメッセージボックスに表示されます。
このSubプロシージャは、CSVファイルにADOを使って接続しているだけですから、AccessやExcelはもちろん、PowerPointやWordでも動きます。
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.CloseSet 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
- Newer:ExcelでXOR演算は?
- Older:DictionaryのNothing判定
Home » ADO(ActiveX Data Objects)の使い方 » Recordsetの列数・フィールドの数を取得する