1. 概要
VBAからMySQLに接続する方法を調べていたら、Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
というものがあることに気づきました(無知がゆえ)。
調べてみると、このドライバでもADOによる接続ができることが分かったので、試しに使ってみました。
基本的なところは、普段使用しているMicrosoft.ACE.OLEDBプロバイダ
と大差はないのですが、
データ型の読込み内容に違いがありました。
この点についても、既に**丁寧に検証されているサイト**がありましたので、もはや書くことがないのですが、せっかく調べたので書いておきます。
Excelの書式 | OLEDBのデータ型 | ODBCのデータ型 |
---|---|---|
文字列 | adVarWChar(202) | adVarChar(200) |
数値 | adDouble(5) | adDouble(5) |
通貨 | adCurrency(6) | adCurrency(6) |
日付 | adDate(7) | adDBTimeStamp(135) |
Microsoftが公式に提供しているものなので知っている方にとっては当たり前かもしれません。
2. ソースコード例
2-1. Connectionオブジェクトの接続部分
一般的に使用されているADODB.Connectionの接続方法
Dim cn As New ADODB.Connection
cn.Provider = "Microsoft.ACE.OLEDB.12.0"
cn.Properties("Extended Properties") = "Excel 12.0"
cn.Open ThisWorkbook.Path & "\" & "TestTable.xlsx"
Microsoft Excel Driverを使用したADODB.Connectionの接続方法
Dim cn As New ADODB.Connection
Dim filePath As String: filePath = ThisWorkbook.Path & "\" & "TestTable.xlsx"
cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & filePath & ";ReadOnly=1"
cn.Open
2-2. 全体のサンプルコード
'【ODBCドライバー】を使用したアクセス方法
Sub ADOSample()
'インスタンスを作成
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim filePath As String: filePath = ThisWorkbook.Path & "\" & "TestTable.xlsx"
'ADO接続
cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & filePath & ";ReadOnly=1"
cn.Open
'SQL文の実行
rs.Open "SELECT * FROM [Sheet1$] WHERE 区分 = '野菜'", cn
'Recordset
Do Until rs.EOF
Debug.Print rs("品名") & ", " & rs("単価") & ", " & rs("購入日")
rs.MoveNext
Loop
'メモリの解放
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
End Sub
参考サイト
・PRB: ODBC を使用して Excel にアクセスする場合、"操作は更新可能なクエリを使用する必要があります"
・ExcelファイルへのADOでのCREATE/DROP/ALTER TABLE
・DAO、ADO、ODBC、OLE DBの違いを簡単にまとめる