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