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」(オープン済)
※上場企業一覧のAccessファイルはこちらのCSVファイルを頂いて作成しました
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ファイルを頂いて作成しました