Accessで帳票PDF化と自動保存処理をマスターしよう!

Access

こんにちは、なかぜんです。

「Accessの帳票をPDFにして保存したいけど、毎回手作業でやってる……」という方、多いのではないでしょうか?

実は、VBAを使えばボタン一つでPDF出力&自動保存が可能なんです。この記事では、Access上級者の皆さんに向けて、実務で役立つ帳票PDF化+自動保存処理の具体的な実装方法を詳しく解説します!

帳票PDF化の基本:DoCmd.OutputToの使い方

AccessでレポートをPDF出力する基本コード

DoCmd.OutputTo acOutputReport, "R_納品書", acFormatPDF, "C:\Reports\納品書_20240601.pdf"

この1行で、レポート「R_納品書」をPDF形式で C:\Reports\ フォルダに保存できます。acOutputReport は「レポート出力」、acFormatPDF はPDF形式の指定です。

ファイル名を日付で自動生成する例

Dim fileName As String
fileName = "C:\Reports\納品書_" & Format(Date, "yyyymmdd") & ".pdf"
DoCmd.OutputTo acOutputReport, "R_納品書", acFormatPDF, fileName

Format(Date, "yyyymmdd")で日付付きのファイル名を作成しておけば、毎日違うファイルとして保存できます。

PDF保存+ファイル存在チェック付きのVBA例

実用的な保存マクロの全体コード

Sub ExportReportToPDF()
    Dim rptName As String
    Dim folderPath As String
    Dim fileName As String

    rptName = "R_納品書"
    folderPath = "C:\Reports\"
    fileName = folderPath & rptName & "_" & Format(Date, "yyyymmdd") & ".pdf"

    ' フォルダ存在チェック
    If Dir(folderPath, vbDirectory) = "" Then
        MkDir folderPath
    End If

    ' 既存ファイルがあれば削除
    If Dir(fileName) <> "" Then
        Kill fileName
    End If

    ' PDF出力
    DoCmd.OutputTo acOutputReport, rptName, acFormatPDF, fileName
    MsgBox "PDF保存が完了しました:" & vbCrLf & fileName, vbInformation
End Sub

このコードでは、保存フォルダがなければ自動で作成し、同名ファイルがあれば削除してから保存します。日々の業務でも使える実用的な構成です。

ボタンクリックで実行!フォーム連携のポイント

フォームにコマンドボタンを配置し、上記のマクロを呼び出すように設定すれば、ワンクリックでPDF出力ができます。

Private Sub cmdPDF出力_Click()
    Call ExportReportToPDF
End Sub

フォーム上のボタン名は cmdPDF出力 にしていますが、任意の名前でOKです。CallでVBAマクロを呼び出すだけです。

【注意】よくあるミスと対処法

  • ファイルパスに日本語を含めない: 一部の環境で文字化けや保存失敗になる場合があります。
  • フォルダの書き込み権限: 保存先フォルダに書き込みできないとエラーになります。
  • レポートが開いていると出力失敗: 出力対象レポートが編集中だとエラーになるので注意。

応用ポイント:レコードごとのPDF保存(ループ処理)

納品先ごとに1ファイルずつPDFを保存する方法

Sub ExportEachCustomerPDF()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim customerID As String
    Dim fileName As String

    Set db = CurrentDb()
    Set rs = db.OpenRecordset("SELECT DISTINCT 納品先CD FROM T_受注", dbOpenSnapshot)

    Do While Not rs.EOF
        customerID = rs!納品先CD
        fileName = "C:\Reports\納品書_" & customerID & "_" & Format(Date, "yyyymmdd") & ".pdf"
        DoCmd.OpenReport "R_納品書", acViewPreview, , "納品先CD = '" & customerID & "'"
        DoCmd.OutputTo acOutputReport, "R_納品書", acFormatPDF, fileName
        DoCmd.Close acReport, "R_納品書", acSaveNo
        rs.MoveNext
    Loop

    rs.Close
    Set rs = Nothing
    Set db = Nothing

    MsgBox "すべてのPDFを保存しました。", vbInformation
End Sub

このコードは「納品先CD」ごとにレポートを出力し、個別のPDFとして保存していきます。大量の得意先に帳票を配布するケースで非常に便利です。

まとめ:AccessのPDF出力は業務効率化の第一歩

Accessの帳票をPDFとして保存する処理は、手作業を減らし、ミスを防ぐ非常に有効な自動化手段です。今回ご紹介したVBAコードを活用すれば、

  • 毎日の帳票を自動でPDF保存
  • レコード単位の出力にも対応
  • フォームボタンからワンクリック実行

といった処理が可能になります。

次のステップへ

今回の内容をマスターしたら、次はメール添付自動化や、ファイル共有フォルダとの連携にも挑戦してみてくださいね。

AccessのVBAでできることは無限大。引き続き、なかぜんと一緒に業務をラクにする技を磨いていきましょう!

最後までお読みいただき、ありがとうございました。