【Access × Excel連携】VBAでデータをExcelに出力する方法

「Accessのデータをもとに書類を作りたいけど、毎回手作業で作成するのは面倒…」

そんな経験はありませんか?

Access VBAを使えば、ボタン一つでテーブルのデータをExcelに自動出力することができます。

この記事ではAccess × Excel連携でVBAを使いテーブルデータを簡単にExcelに出力する方法を解説します。

この記事で分かること
  • AccessデータをExcelに自動出力する方法
  • Excelテンプレートでの書類作成方法
  • 保存先・ファイル名の設定方法
  • VBAでのExcel操作と注意点
目次

AccessからExcelを操作するVBA

Access VBAを使うとAccessのデータをExcelへ自動で転記することができます。

まずは基本的なVBAコードを確認してみましょう。

基本的なコード

Sub ExportExcel()

    Dim xlApp As Object
    Dim xlBook As Object
    Dim xlSheet As Object
    Dim path As String

    path = "C:\Temp\template.xlsx"

    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("テーブル名")

    Set xlApp = CreateObject("Excel.Application")

    Set xlBook = xlApp.Workbooks.Open(path)
    Set xlSheet = xlBook.Sheets("シート名")

    ' データ書き込み
    Dim rowNum As Long
    rowNum = 2 ' 1行目は見出し

    Do Until rs.EOF
        xlSheet.Cells(rowNum, 1).Value = rs!社員名
        xlSheet.Cells(rowNum, 2).Value = rs!部署名
        rowNum = rowNum + 1
        rs.MoveNext
    Loop

    xlApp.Visible = True

    rs.Close: Set rs = Nothing

    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing

End Sub

コードの内容解説

サンプルコードが行っている内容は次の通りです。

  • Excelテンプレートのパスを指定
  • Accessテーブルのデータを取得
  • Excelオブジェクトを使ってExcelを起動
  • 取得したデータをExcelに書き込む

注意

このコードではテンプレートに直接書き込むため、保存すると元ファイルが上書きされます。

新しいファイルとして出力する場合はSaveAsを使って保存してください。

詳しい手順は次の見出しをご参照ください。

Excelデータの保存先と保存名を指定して保存する

Access VBAでは作成したExcelデータを任意の保存先と保存名で保存することができます。

基本構文

Dim savePath As String
savePath = "C:\Temp\出力ファイル.xlsx"

xlBook.SaveAs savePath

Excel.Workbook型の変数のSaveAsメソッドを使うことで、
保存先と保存名を指定してExcelファイルを保存できます。

この書き方のメリット

SaveAsメソッドを使うことで次のようなメリットがあります。

  • ファイル名をVBAで自由に指定できる
  • 保存先フォルダを自由に指定できる
  • 既存ファイルがあれば上書き保存も可能

ファイル名を動的に切り替える

テーブルデータなどの内容によってExcelファイルの名前を動的に切り替えることも可能です。

Dim savePath As String

savePath = "C:\Temp\" & rs!社員名 & "_" & Format(Now, "yyyymmdd") & ".xlsx"

xlBook.SaveAs savePath
  • Format(Now, "yyyymmdd")で日付をファイル名に組み込める
  • テーブルの値を組み合わせて動的にファイル名を生成できるため、帳票作成に便利

実務で使える応用例

実際にAccessのフォームで選択したレコードの情報をもとに、Excelテンプレートを使って領収書を作成するVBAサンプルをご紹介します。

サンプルコード

Sub CreateReceipt()

    Dim xlApp As Object, xlBook As Object, xlSheet As Object
    Set xlApp = CreateObject("Excel.Application")

    xlApp.Visible = True

    Set xlBook = xlApp.Workbooks.Open("C:\Temp\ReceiptTemplate.xlsx")
    Set xlSheet = xlBook.Sheets("領収書")

    Dim rs As DAO.Recordset
    Set rs = Me.RecordsetClone

    If Me.NewRecord Then MsgBox "レコードを選択してください": Exit Sub
    rs.Bookmark = Me.Bookmark

    xlSheet.Range("B3").Value = rs!顧客名
    xlSheet.Range("B4").Value = rs!日付
    xlSheet.Range("B5").Value = rs!金額

    xlBook.SaveAs "C:\Temp\領収書_" & rs!顧客名 & "_" & Format(Now, "yyyymmdd") & ".xlsx"
    MsgBox "領収書を作成しました。", vbInformation

    rs.Close: Set rs = Nothing
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing

End Sub

ポイント解説

このサンプルコードで行っている処理は次の通りです。

  • フォームで選択中のレコードを取得
  • Excelテンプレートを開き、指定セルに値をセット
  • SaveAsで元テンプレートを上書きせず別名で保存
  • 作業後にExcelオブジェクトをNothingで解放

これによりテーブルのデータから顧客名+日時を組み合わせた領収書ファイルを自動生成できます。

Access × Excel連携の注意点

Excelファイルのパスを確認する

Excelファイルのパスが間違っているとファイルを開く際にエラーになります。

Dim path As String

path = "C:\Temp\template.xlsx"

Set xlBook = xlApp.Workbooks.Open(path)

パスは絶対パスで指定するようにしましょう。

長いパスや複数の個所で使用する場合は変数に入れることで管理が楽になります。

Excelオブジェクトを開放する

Access VBAでExcelを操作したら変数をNothingに設定してオブジェクトを解放しましょう。

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

省略しても動作しますがExcelが裏で残ったりメモリを消費するのを防ぐため付けておくのがおすすめです。

まとめ

今回はAccess × Excel連携で、VBAを使ってテーブルデータをExcelに出力する方法を解説しました。

  • 決まったフォーマットで書類を自動作成できる
  • 保存先やファイル名を自由に設定できる
  • 手作業で行っていた作業をボタン一つで自動化し業務効率化につながる

この方法を使えば、毎月の帳票作成や領収書発行にかかる時間を大幅に短縮できます。

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次