こんにちは、なかぜんです。
今回は、AccessとExcelをマクロ(VBA)で高度に連携させて業務効率を最大化する方法についてご紹介します。
「Accessで蓄積したデータをExcelでレポート化したい…」「Excelのテンプレートに自動でデータを流し込みたい…」
そんな現場の悩みに、VBAによる連携処理が強力な味方になります。
この記事では、AccessとExcelの連携マクロについて、コード例・画面構成・注意点・応用ポイントを交えて解説します。業務で活かせる実践的な内容ですので、ぜひ参考にしてください。
AccessとExcelの連携とは?
基本の考え方
Accessはデータ管理に優れ、Excelは表計算と印刷・レイアウトに優れています。両者の強みを活かすには、VBAを使って片方からもう片方を制御する形が最も効果的です。
連携の主なパターン
- Access → Excel:データを書き出す・帳票を出力する
- Excel → Access:入力済データを取り込む・一括更新する
- 双方向:AccessとExcelをAPI的に扱う
AccessからExcelにデータを書き出す
ExcelテンプレートにAccessのデータを流し込む例
Accessのフォームにボタンを配置して、クリック時にExcelテンプレートを開き、Accessのデータを指定セルに転記します。
Private Sub cmdExport_Click()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim i As Long
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Open("C:\テンプレート\報告書.xlsx")
Set xlSheet = xlBook.Sheets("集計表")
Set db = CurrentDb()
Set rs = db.OpenRecordset("SELECT 社員名, 件数 FROM T_業務集計", dbOpenSnapshot)
i = 2 ' Excelの2行目から書き出し
Do Until rs.EOF
xlSheet.Cells(i, 1).Value = rs!社員名
xlSheet.Cells(i, 2).Value = rs!件数
i = i + 1
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
Set db = Nothing
End Sub
コードのポイント解説
CreateObject("Excel.Application")
でExcelを起動Workbooks.Open
でテンプレートを開く- DAOを使ってクエリ結果を読み込み
Cells(i, j)
でExcelセルに値を書き込む
ExcelからAccessにデータを取り込む
Excelで入力された内容をAccessのテーブルにインポートする例
Public Sub ImportExcelData()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim i As Long
Dim lastRow As Long
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("C:\入力ファイル\日報.xlsx")
Set xlSheet = xlBook.Sheets("データ入力")
Set db = CurrentDb()
Set rs = db.OpenRecordset("T_日報", dbOpenDynaset)
lastRow = xlSheet.Cells(xlSheet.Rows.Count, 1).End(-4162).Row ' A列の最終行
For i = 2 To lastRow
rs.AddNew
rs!日付 = xlSheet.Cells(i, 1).Value
rs!担当者 = xlSheet.Cells(i, 2).Value
rs!作業内容 = xlSheet.Cells(i, 3).Value
rs.Update
Next i
rs.Close: Set rs = Nothing
xlBook.Close False
xlApp.Quit
Set xlApp = Nothing
End Sub
このコードのポイント
Rows.Count
と.End(-4162)
で最終行を取得(上方向に探索)AddNew → Update
で1件ずつレコードを追加- Excelを非表示にしてもOK(Visible=False)
注意点とよくあるミス
Excelとの連携でつまづきやすいポイント
- Excelファイルのパスが間違っている → 絶対パスで記述し、事前に存在確認を
- 参照設定をし忘れる → DAOまたは早期バインディング利用時は注意
- Excelが見えない → 開発時は
xlApp.Visible = True
で表示しよう - ファイルがロック中 → 他ユーザーと共有していないか確認
応用ポイント:双方向・条件付き出力・グラフ自動生成など
AccessからExcelグラフを自動生成
Excelにデータ転送後、マクロ内でグラフオブジェクトを生成することで、視覚的なレポートを自動作成できます。
Dim chartObj As Object
Set chartObj = xlSheet.ChartObjects.Add(Left:=100, Width:=400, Top:=50, Height:=300)
With chartObj.Chart
.SetSourceData Source:=xlSheet.Range("A2:B10")
.ChartType = 51 ' xlColumnClustered
.HasTitle = True
.ChartTitle.Text = "社員別作業件数"
End With
AccessでExcelのマクロを実行
AccessからExcelを開き、Excel側に埋め込まれたマクロを呼び出すことも可能です。
xlApp.Run "マクロ名" ' ExcelのThisWorkbook内マクロを実行
ユーザー別・月別出力の自動化
ループでユーザーごとのExcelファイルを出力したり、月ごとのディレクトリにファイルを自動保存したりする処理も組み込み可能です。
まとめ:Access×Excel連携で業務が変わる!
今回は、AccessとExcelを連携するマクロ(VBA)処理について、実用的なコードを交えてご紹介しました。
- AccessからExcelへのデータ出力
- ExcelからAccessへのインポート
- グラフ生成やExcelマクロの呼び出し
これらの技術をうまく使えば、現場の手作業を最小限に抑え、安定したデータ連携を実現できます。
次のステップとしては、テンプレートの自動生成や、ユーザーフォームによる制御画面の構築にチャレンジするのもおすすめです。
少しずつ試しながら、Access×Excel連携の達人を目指しましょう!
なかぜんでした😊
