今回はADOを使用してAccessのデータをExcelに取り込む方法をご紹介します。
環境は、Access2010とExcel2010。
取り込むAccessのファイル名は「顧客管理.accdb」、保存先はCドライブの直下のAccessフォルダの中です(C:\Access\顧客管理.accdb)。
動作イメージは以下のとおりです。
Accessの「T_顧客リスト」テーブルのデータをExcelに取り込み、「顧客リスト」シートに表示させます。
ADO(ActiveX Data Object)とは
Accessだけでなく、Oracle、MySQLなどの様々なデータベースに対して共通の手法で操作が出来る仕組みです。ExcelからADOを使用するためには、参照設定が必要です。
事前準備としてVBEの「ツール」メニュー → 「参照設定」をクリックし、「参照設定」ダイアログボックスを表示し、「Microsoft ActiveX Data Objects X.X Library」にチェックを入れます(X.Xはバージョン)。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
[code] Public Sub Access接続() Dim con As New ADODB.Connection Dim rs As ADODB.Recordset Dim i As Integer con.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=C:\Access\顧客管理.accdb;" Set rs = con.Execute("SELECT * FROM T_顧客リスト WHERE 性別 = '女'") i = 2 Do Until rs.EOF With Worksheets("顧客リスト") .Cells(i, 1).Value = rs!顧客ID .Cells(i, 2).Value = rs!顧客名 .Cells(i, 3).Value = rs!ふりがな .Cells(i, 4).Value = rs!性別 .Cells(i, 5).Value = rs!生年月日 End With i = i + 1 rs.MoveNext Loop rs.Close: con.Close Set rs = Nothing: Set con = Nothing End Sub [/code] |
コード解説
1. Accessデータベースに接続します。
Accessデータベースへ接続するには、ConnectionオブジェクトのOpenメソッドを使用します。接続文字列内の「Data Source」には接続するAccessファイルのパスを記述します。
1 2 3 4 |
[code firstline="6"] con.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=C:\Access\顧客管理.accdb;" [/code] |
2. ConnectionオブジェクトのExecuteメソッドを使用して、レコードセットを取得します。
今回は「顧客管理.accdb」の「T_顧客リスト」テーブルに対して、「性別」列の値が「女」の行を取得する問合せを発行しています。
1 2 3 |
[code firstline="9"] Set rs = con.Execute("SELECT * FROM T_顧客リスト WHERE 性別 = '女'") [/code] |
3. 問合せの結果をExcelの「顧客リスト」シートに出力します。
今回は2行目から出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[code firstline="11"] i = 2 Do Until rs.EOF With Worksheets("顧客リスト") .Cells(i, 1).Value = rs!顧客ID .Cells(i, 2).Value = rs!顧客名 .Cells(i, 3).Value = rs!ふりがな .Cells(i, 4).Value = rs!性別 .Cells(i, 5).Value = rs!生年月日 End With i = i + 1 rs.MoveNext Loop [/code] |
4. データベースを切断します。
Closeメソッドを使用し、レコードセットとConnectionオブジェクトを閉じます。
また、それぞれの変数に「Nothing」キーワードを代入し、オブジェクトへの参照を解除します。
1 2 3 4 |
[code firstline="26"] rs.Close: con.Close Set rs = Nothing: Set con = Nothing [/code] |
以上、今回はADOを使用してAccessのデータをExcelに取り込む方法でした。