ExcelからAccessデータにADOを使って接続する



ExcelVBAでADO接続を使用してMSAccessのデータを取得する方法です。
ADOはActiveX Data Objectsの略でOLEDB(Object Linking and Embedding, Database)プロバイダを通してデータを取得する APIです。

ADOを使用するには参照設定(VBEの「ツール」)で Microsoft ActiveX Data Objects 6.1 Library にチェックを入れます。

バージョンによる違いはよくわかりません。とりあえず最新のにチェック入れておけばいいと思います。


サンプルコードでは企業コードから業種と市場をエクセルに出力してみます。
サンプルファイル名
・Accessファイル:「ListedCompany.accdb」もしくは「ListedCompany.mdb」
・Access内テーブル:「T_LC」
・出力先エクセルファイル:「sample52.xlsx」(オープン済)

テーブルイメージ

サンプルコード
Sub testAdo()
Dim i As Long
' ※注)参照設定
'出力先エクセルファイル
Dim ws As Worksheet
    
 Set ws = Workbooks("sample52.xlsx").Worksheets(1)

 '接続するAccessファイル名
  Dim dbAcc As Variant
   dbAcc = "D:\test\ListedCompany.accdb"
    
   '旧ファイル形式
   'dbAcc = "D:\test\ListedCompany.mdb"
    
 '接続する
  Dim dbConnect As New ADODB.Connection
    dbConnect.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _
    & "Data Source=" & dbAcc & ""
 dbConnect.Open
    
'条件に合うレコードを取得する
  Dim dbRecordset As New ADODB.Recordset
  Dim dbTarget As ADODB.Fields
  Dim strSQL As String

 '===================
  For i = 2 To 11
    '企業コードでの条件検索
    strSQL = "SELECT * FROM T_LC WHERE 企業コード = " & ws.Cells(i, 1) & ""
     dbRecordset.Open strSQL, dbConnect, adOpenKeyset, adLockReadOnly
    
     Set dbTarget = dbRecordset.Fields
      ws.Cells(i, 2) = dbTarget("業種")
      ws.Cells(i, 3) = dbTarget("市場")
    
      '取得したレコードを閉じる
      dbRecordset.Close
  Next i

 '接続を閉じる
 dbConnect.Close

End Sub


結果イメージ



※上場企業一覧のAccessファイルはこちらのCSVファイルを頂いて作成しました