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