hakeの日記

Windows環境でプログラミングの勉強をしています。

EXCEL VBA - CSVファイルをSQLで検索

CSVファイルの内容をSQL文で検索する方法を知ったのでメモ。(確認環境 Windows10 64bit, Excel2013)

data.csv

No,名前,色,値
1,イチゴ,赤,50
2,リンゴ,赤,100
3,メロン,緑,300
4,ブドウ,紫,200
5,オレンジ,オレンジ,150

色が赤いものを抽出

Sub foo()
    myDIR = "C:\csv"
    myCSV = "data.csv"
    mySQL = "SELECT * FROM " & myCSV & " WHERE 色='赤';"

    Set rs = CreateObject("ADODB.Recordset")
    Con = "Provider=Microsoft.ACE.OLEDB.12.0;" & _     ' Provider指定はEXCELのVersionで異なる可能性有
        "Data Source=" & myDIR & ";" & _
        "Extended Properties=""text;FMT=Delimited;"";"

    rs.Open mySQL, Con, 0


    Do Until rs.EOF = True          ' -> 項目1 :1  項目2 :イチゴ  項目1 :2  項目2 :リンゴ
        MsgBox "項目1 :" & rs(0)
        MsgBox "項目2 :" & rs(1)
        rs.MoveNext
    Loop

    rs.Close
    Set rs = Nothing
End Sub

csvにヘッダが無い場合

ヘッダ情報が無いCSVの場合は、フィールド番号で指定する。

Sub bar()
' CSVにヘッダが無い場合

    myDIR = "C:\csv"
    myCSV = "data.csv"
    mySQL = "SELECT * FROM " & myCSV & " WHERE F3='赤';"   'ヘッダの項目ではなくFnで指定

    Set rs = CreateObject("ADODB.Recordset")
    Con = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & myDIR & ";" & _
        "Extended Properties=""text;HDR=No;FMT=Delimited;"";"   ' HDR=Noを追加

    rs.Open mySQL, Con, 0


    Do Until rs.EOF = True
        MsgBox "No :" & rs(0)
        MsgBox "名前 :" & rs(1)
        rs.MoveNext
    Loop

    rs.Close
    Set rs = Nothing
End Sub