アクセスDataからエクセルへ展開したい。
今度は逆にアクセルDataから簡単にVBA利用して、エクセルへ展開する方法ないのかな。。。
同じようにデータベース接続を利用すれば、エクセルへの展開できますよ。
やっぱりできるんですね♪そこのとこ詳しくお願いします。
ハイ、では、前回同様、概略手順を下記にサンプルとして記しますね♪
概略手順
- データベース接続オブジェクトの宣言
- レコードセットオブジェクト
- アクセスのテーブル名
- アクセステーブルの項目名 ※アクセス項目名=エクセル項目名であること
- 取り込みたいDataの式追加。
サンプル
Sub Accessからimport() |
Dim mycon As New ADODB.Connection 'データベース接続オブジェクト |
Dim mrs As New ADODB.Recordset 'レコードセットオブジェクト |
Dim mySQL As String 'Accessの対象オブジェクト |
Dim dbPath As Variant 'データベースファイルオブジェクト |
Dim msn As Variant ’アクティブシート名 |
Dim i As Integer |
dbPath = "D:\ProgramData\Access\FileDB.accdb" 'データベースファイルのありか |
mycon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbPath & "" |
mycon.Open |
mySQL = "SELECT * FROM アクセスのテーブル名" |
mrs.Open mySQL, mycon, adOpenDynamic |
msn = ActiveSheet.Name |
’以下 サンプル式なので、検索条件に合わせてVBA作成必要。 |
------ここからーーーーーーーーーーーーーー |
i = 2 'Data貼り付け行の位置 |
Do Until mrs.EOF |
With Worksheets(msn) |
.Cells(i, 1).Value = mrs!acn1 ’アクセステーブルの項目名 |
.Cells(i, 2).Value = mrs!acn2 |
.Cells(i, 3).Value = mrs!acn3 |
.Cells(i, 4).Value = mrs!acn4 |
End With |
i = i + 1 |
mrs.MoveNext |
Loop |
------ここまでーーーーーーーーーーーーーー |
mrs.Close |
Set mrs = Nothing |
mycon.Close |
Set mycon = Nothing |
End Sub |
ADOを使うための準備設定です。
VBE画面-メニューの「ツール」-「参照設定」で、