Access×Excel徹底連携!業務を加速させるマクロ活用テクニック集

Access

こんにちは、なかぜんです。
今回は、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連携の達人を目指しましょう!
なかぜんでした😊