AccessのデータをPDFに出力する方法をお探しですね。

広告

AccessでレポートやフォームをPDFに保存する方法【手動・ボタン化・VBA自動化まで】

Accessで作った請求書や納品書、売上一覧、顧客リストなどは、印刷するだけじゃなくてPDFで保存して共有することもできます。

メールに添付したり、紙を使わずに保管したりするのに便利ですし、レイアウトが崩れずに相手に渡せるのが大きなメリットです。

この記事では、AccessのレポートやフォームをPDFとして出力・保存する方法を、手動でやる方法から、ボタン化、VBAを使った自動保存まで、順番に分かりやすく解説していきます。

AccessのレポートやフォームをPDFにする基本のやり方

AccessでPDFを作るいちばん簡単な方法は、出力したいレポートやフォームを開いて、リボンから「PDFまたはXPS」を選ぶ方法です。

特にレポートは、もともと印刷や帳票を出力するために作られているので、請求書や見積書、納品書、集計表などをPDF化するのに向いています。

フォームもPDFにできますが、フォームは本来データを入力したり検索したりするための画面なので、社外に渡す書類や正式な帳票として使うなら、レポートを作ってからPDF化したほうが見た目をきれいに整えやすいです。

手動でPDF保存する手順はこんな感じです。

まず、対象のレポートかフォームを表示します。

レポートなら印刷プレビューで開いておくと、実際にPDFになったときのページの余白や改ページ、文字が切れていないかなどを確認しやすくなります。

その後、Accessの上のほうにある「外部データ」タブから「PDFまたはXPS」を選んで、保存先のフォルダとファイル名を指定して「発行」をクリックします。

ダイアログでは、保存した後にファイルを自動で開くかどうかの設定や、標準品質か最小サイズかの選択、ページ範囲の指定などもできます。

この方法のいいところは、VBAやマクロの知識がなくてもすぐに使えることです。

一度だけPDFを作りたいときや、少ない数の帳票を確認しながら保存したいときには十分便利です。

ただ、毎日同じレポートを同じ場所に保存したり、顧客ごとにファイル名を変えて出力したり、ボタン1つで処理を終わらせたいような場合には向いていません。

何度も繰り返すPDF保存作業では、次に紹介する「エクスポート操作の保存」やVBAを使うことで、作業時間とミスを大きく減らせます。

エクスポート操作を保存してボタンからPDF保存する方法

Accessには、PDFとして出力した操作を「保存済みのエクスポート操作」として登録できる機能があります。

これは、同じレポートを同じ形式で何度も出力する場合にとても便利です。

たとえば、月間売上報告書を毎月PDF化するとか、定型の一覧表を会議の前に保存するとか、そういった定期的な作業では、保存先や出力形式を毎回指定する手間が省けます。

VBAを書くほど複雑じゃないけど、クリック数を減らしたいときにちょうどいい方法です。

やり方は、いつもどおり「PDFまたはXPS」でPDFを発行した後に表示される「エクスポート操作の保存」を使います。

チェックをオンにして、分かりやすい名前を付けて保存しておけば、次回からは「外部データ」タブの「保存済みのエクスポート操作」から同じ処理をもう一度実行できます。

すでにファイルがある場合は上書き確認が出ることがあるので、運用するときはファイル名や保存先のルールを決めておくと安心です。

さらに便利にするなら、フォーム上にボタンを配置して、クリックしたときに保存済みのエクスポート操作を実行するマクロを割り当てる方法があります。

フォームのデザインビューでボタンを作って、プロパティの「クリック時」からマクロビルダーを開いて、「保存済みのインポート/エクスポート操作の実行」を選びます。

登録済みのエクスポート操作名を指定すれば、ユーザーはフォーム画面のボタンを押すだけでPDF保存ができるようになります。

Accessにあまり慣れていない人が使う業務画面では、リボン操作を覚えてもらうよりも、ボタン化したほうが操作ミスを防ぎやすくなります。

ただし、この方法は保存内容が固定されやすい点に注意が必要です。

たとえば「今フォームで表示している1件だけをPDF化したい」とか「日付や請求番号をファイル名に自動で付けたい」とか「顧客ごとに複数ファイルを一気に作りたい」といった要望には、保存済みエクスポート操作だけでは対応しづらいです。

そういう場合は、VBAの「DoCmd.OutputTo」というコマンドを使って、出力対象や保存先、ファイル名をプログラムで制御する方法が向いています。

VBAでレポートやフォームをPDFとして自動保存する方法

Access VBAでPDF出力を行う代表的な方法が、**DoCmd.OutputTo**というコマンドです。

これはAccess内のオブジェクトを外部ファイルとして出力するための命令で、レポートなら「acOutputReport」、フォームなら「acOutputForm」、出力形式にPDFを指定する場合は「acFormatPDF」を使います。

基本の形はシンプルで、対象オブジェクトの種類、オブジェクト名、出力形式、保存先ファイルパスを指定すればPDFを作成できます。

たとえば、レポート「R_請求書」をPDFとして保存する基本のコードはこんな感じです。

“`vba
DoCmd.OutputTo acOutputReport, “R_請求書”, acFormatPDF, “C:\Reports\請求書.pdf”
“`

フォームをPDF化したい場合は、出力対象をフォームに変えます。

“`vba
DoCmd.OutputTo acOutputForm, “F_顧客情報”, acFormatPDF, “C:\Reports\顧客情報.pdf”
“`

実際の業務では、固定のファイル名じゃなくて、日付や請求IDを含めたファイル名にすることが多いです。

同じ名前で保存すると上書きされちゃうので、帳票の種類、キー項目、出力日を組み合わせると管理しやすくなります。

たとえば、Accessファイルと同じフォルダにPDFを保存したい場合は、`CurrentDb.Name`で現在のデータベースファイルのパスを取得して、`InStrRev`関数と`Left`関数でフォルダ部分だけを取り出す方法があります。

これなら、使う人の環境が変わっても、Accessファイルと同じ場所へ安定して出力できます。

“`vba
Dim folderPath As String
Dim filePath As String

folderPath = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, “\”))
filePath = folderPath & “請求書_” & Format(Date, “yyyymmdd”) & “.pdf”

DoCmd.OutputTo acOutputReport, “R_請求書”, acFormatPDF, filePath
“`

VBAでPDF保存する最大のメリットは、フォームのボタンからワンクリックで実行できることです。

フォームに「PDF保存」ボタンを置いて、そのクリック時イベントに処理を書けば、ユーザーは保存先やファイル名を意識せずに帳票を作成できます。

さらに、保存フォルダがあるかを確認してなければ作成する、同じ名前のファイルがある場合に削除または別名保存する、保存後にメッセージを表示する、といった実務向けの細かい制御も可能です。

“`vba
Private Sub cmdPDF保存_Click()

Dim folderPath As String
Dim filePath As String

folderPath = “C:\Reports\”

‘ フォルダがなければ作成
If Dir(folderPath, vbDirectory) = “” Then
MkDir folderPath
End If

filePath = folderPath & “請求書_” & Format(Date, “yyyymmdd”) & “.pdf”

‘ 同名ファイルがあれば削除
If Dir(filePath) <> “” Then
Kill filePath
End If

DoCmd.OutputTo acOutputReport, “R_請求書”, acFormatPDF, filePath

MsgBox “PDFを保存しました。

” & vbCrLf & filePath, vbInformation

End Sub
“`

特定のレコードだけをPDF出力する場合の注意点と実務のコツ

Accessで請求書や納品書をPDF化するとき、重要になるのが**「今表示している1件だけを出力する」**処理です。

DoCmd.OutputToは便利なんですが、それ自体には「請求IDがこの値のレコードだけを出力する」という抽出条件を直接指定する引数がありません。

そのため、何も対策せずにレポートを出力すると、レポートの元データに含まれる全レコードがPDF化されてしまうことがあります。

これは請求書発行や顧客別帳票では特に避けたいミスです。

特定の1件だけをPDFにしたい場合は、先に**DoCmd.OpenReport**で条件を指定してレポートを開いて、その状態でDoCmd.OutputToを実行します。

たとえば、フォーム上の請求IDに対応する請求書だけをPDF化する場合は、OpenReportの`WhereCondition`引数に条件を指定します。

ユーザーにレポート画面を見せる必要がない場合は、`acHidden`を指定して非表示で開いて、PDF出力後に閉じると自然な操作になります。

“`vba
Private Sub cmd請求書PDF_Click()

Dim folderPath As String
Dim filePath As String

folderPath = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, “\”))
filePath = folderPath & “請求書_” & Me!請求ID & “.pdf”

‘ 条件を指定してレポートを非表示で開く
DoCmd.OpenReport “R_請求書”, acViewPreview, , “請求ID = ” & Me!請求ID, acHidden

‘ PDFとして出力
DoCmd.OutputTo acOutputReport, “R_請求書”, acFormatPDF, filePath

‘ レポートを閉じる
DoCmd.Close acReport, “R_請求書”, acSaveNo

MsgBox “請求書PDFを保存しました。

“, vbInformation

End Sub
“`

なお、抽出条件の書き方はフィールドのデータ型によって変わります。

請求IDのような数値型であれば「請求ID = 1001」のようにそのまま連結できますが、顧客コードや納品先CDのようなテキスト型では、値をシングルクォーテーション(‘)で囲む必要があります。

日付型を条件にする場合はAccess SQLのルールに合わせて「#2026/06/22#」のようにシャープ(#)で囲むのが基本です。

ここを間違えると、データ型の不一致エラーが出たり、意図しないレコードが出力されたりします。

実務で安定して運用するには、**保存先フォルダ、ファイル名、上書きルール、抽出条件**の4点をあらかじめ決めておくことが大切です。

たとえば「PDFはAccessファイルと同じフォルダ内のPDFフォルダに保存する」「ファイル名は帳票名_取引先コード_日付.pdfにする」「同名ファイルがある場合は上書きする」などのルールを作っておくと、後から探しやすくなります。

また、フォームをPDF化する場合でも、印刷物としてきちんとした見た目が必要なら、フォームの内容をもとにレポートを開いてPDF出力する設計のほうが保守しやすくなります。

複数の顧客や納品先ごとにPDFを一括作成したい場合は、レコードセットを使って対象データを1件ずつ読み込んで、OpenReportで条件を変えながらOutputToを繰り返します。

この方法を使えば、納品先ごとに納品書PDFを作ったり、担当者別に売上表を分けて保存したりできます。

ただし、大量出力では保存先の権限、ファイル名に使えない文字、処理中にレポートを閉じ忘れないことなどに注意が必要です。

まずは少ないデータでテストして、正しいファイルが作られることを確認してから本番運用に移すと安全です。

まとめ

AccessのレポートやフォームをPDFとして出力・保存する方法は、手動操作からVBA自動化まで段階的に選べます。

– **一度だけ保存するなら**「PDFまたはXPS」
– **定型作業を簡単にしたいなら**保存済みエクスポート操作とボタン化
– **業務システムとして安定運用したいなら**VBAによるOutputTo

特に請求書や納品書のように「特定レコードだけを正確にPDF化する」帳票では、OpenReportで条件を指定してから出力する考え方を押さえておくと、全件出力のミスを防ぎながら効率的にPDF保存できます。

この記事を参考に、自分の業務に合った方法でAccessのPDF出力を活用してみてください!

広告