たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_ADOの利用_【Recordset】CSVファイル/テキストファイルに接続

CSVファイルに接続しその内容(Recordset)を取得

今回の記述に関する前情報

何を行うか

CSVファイル(外部ファイル)に接続し、SQLステートメントで必要な情報のみに絞ったレコードセットを取得
カンマ区切り形式のデータであれば.txtのファイルでも同じようにレコードセットの取得が可能

利用時の書式

以下のうちどちらの書き方でもOK

・ConnectionオブジェクトのOpenメソッドの引数にそれ用の接続文字列を設定する場合
Connectionオブジェクト変数.Open "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = フォルダのパス; Extended Properties = 'Text;HDR=NO'"
Set Recordsetオブジェクト変数 = Connectionオブジェクト変数.Execute("SELECT * FROM csvファイル名.csv")


・ConnectionオブジェクトのConnectionStringプロパティにそれ用の接続文字列を代入してからOpenする場合
Connectionオブジェクト変数.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = フォルダのパス; Extended Properties = 'Text;HDR=NO'"
Connectionオブジェクト変数.Open
Set Recordsetオブジェクト変数 = Connectionオブジェクト変数.Execute("SELECT * FROM csvファイル名.csv")


記述例における利用パーツ

ステートメント
  →Do Loop
・プロパティ
  →Field
・メソッド
  →MoveNext / Open / Close

注意点

Text;HDR=NO' → 1行目はデータとして認識
書式 SELECT FROM ファイル名.csv WHERE フィールド名 = 値
Text;HDR=YES' → 1行目はフィールド名として認識
書式 SELECT
FROM [ファイル名.csv] WHERE [ファイル名#csv].列番号 = 値
※フィールド名があるのにNOにすると、カラム名とデータの、それぞれのデータ型が異なっているとカラム名(1レコード目)がNullになって読み込まれる
※列番号は「F1」「F2」のように、あたまにFをつけて記述する

【実践】CSVファイルに接続する記述例

カレントプロジェクトのデータベースに接続する場合の記述
デスクトップ上にあるCSVファイル「yubin_data.csv」に接続してRecordsetを取得し
左から4つのフィールドのみをイミディエイトウィンドウに表示

▼取得対象ファイル「yubin_data.csv」▼


▼記述例▼

Sub read_csv()

Dim CNT As ADODB.connection
Dim RST As ADODB.Recordset
Set CNT = New ADODB.connection
CNT.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\user\デスクトップ\; Extended Properties='Text;HDR=NO'"

Set RST = CNT.Execute("SELECT * FROM yubin_data.csv")
Do Until RST.EOF
    Debug.Print RST.Fields(0), RST.Fields(1), RST.Fields(2), RST.Fields(3)
    RST.MoveNext
Loop

RST.Close: CNT.Close
Set RST = Nothing: Set CNT = Nothing

End Sub



▼実行結果▼