メニュー 表示 非表示

ADODBでCSVファイル読み込み@Excel マクロ・VBA

ADODBを用いて、CSVファイルを読み込みます。
Microsoft ActiveX Data Objectを参照設定します。

以下のCSVファイルを読み込みます。
1,名前A,AAA
2,名前B,BBB
3,,CCC
4,名前D,

接続文字列を作成します。
Provider:Microsoft.Jet.OLEDB.4.0
Data Source:CSVが置かれているフォルダパス
Extended Properties:"Text;HDR=NO;FMT=Delimited"
(HDRは、CSVファイルにヘッダがあるかないかです、あればYES)
(FMT=Delimitedは、CSVファイルの意味です。)

接続を行います。
そのあと、SQL文を発行します。
Fromの所で、CSVファイル名を指定します。
WHERE句も利用できます。(likeも使えました。)

HDR=YESの場合は、そのままカラム名にヘッダ名を使用します。
HDR=NOの場合は、自動的にカラム名が付与されます。
(F1,F2,F3,F4・・・)な感じみたいです。

SQL文を発行して、Recordsetを取得します。
あとは、結果をシートに書き込みます。

VBAも色々と出来るんですね。



Option Explicit

Sub ReadCSV()

Dim con As New ADODB.Connection
Dim connectionString As String
Dim csvFilePath As String

Dim rs As ADODB.Recordset
Dim item As Variant
Dim rowNo As Integer
Dim colNo As Integer

'CSVファイルが置かれているフォルダ
csvFilePath = "C:\"

'接続文字列、CSVファイルにラベルがあれば、HDR=YES
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                    & "Data Source=" & csvFilePath & ";" _
                    & "Extended Properties=""Text;HDR=NO;FMT=Delimited"""


On Error GoTo Err
'コネクションオープン
con.Open connectionString

'SQL文を実行(RecordSETで受け取ります)
'全件
Set rs = con.Execute("SELECT * FROM test.csv")

'条件検索
'2列目の値が「~A」のデータのみ抽出
'Set rs = con.Execute("SELECT * FROM test.csv WHERE F2 like '%A'")

'シートデータクリア
Worksheets("Sheet1").Cells.Clear

rowNo = 1
colNo = 1
'RecordSetの終了まで
Do While rs.EOF = False

    'データ抽出
    For Each item In rs.fields
        Worksheets("Sheet1").Cells(rowNo, colNo).Value = item.Value
        colNo = colNo + 1
    Next
    colNo = 1
    rowNo = rowNo + 1

    '次のレコード
    rs.MoveNext
Loop

'クローズ
con.Close
Set rs = Nothing
Set con = Nothing
Exit Sub

Err:
Set rs = Nothing
Set con = Nothing

'エラー内容
MsgBox (Err.Description)

End Sub




Copyright (C) Excelマクロ・VBAのお勉強. All Rights Reserved.