4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【VBA / ADO】ExcelへのDB接続に OLEDBプロバイダ のほかに ODBCドライバー も使えることについて

Posted at

1. 概要

VBAからMySQLに接続する方法を調べていたら、Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)というものがあることに気づきました(無知がゆえ)。
2021-02-14 234553.png
調べてみると、このドライバでも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の違いを簡単にまとめる

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?