VBA自動化で請求書PDF業務を効率化!一括出力・結合からメール送付まで事務工数を激減させる方法

VBA自動化で請求書PDF業務を効率化!一括出力・結合からメール送付まで事務工数を激減させる方法

請求書のPDF送付を自動化!VBAによる一括結合・分割で事務工数を激減させる方法

毎月の請求書発行業務で、1枚ずつPDFに変換し、ファイル名を手入力し、メールに添付して送信する。この繰り返しに何時間も費やしていないでしょうか。取引先が数十社にもなれば、月末の残業は避けられません。

こうした請求書まわりの定型作業は、VBAによる自動化で劇的に改善できます。PDF出力から結合・分割、さらにはOutlook連携によるメール送付まで、ボタン1つで完了する仕組みを構築可能です。

本記事では、VBAで自動化できる請求書PDF業務の具体的な手法と、前任者が残したマクロを活かしながら実務負担を減らすための考え方を解説します。

監修者情報

株式会社セルネッツ 代表取締役 竹本 一道

「パッケージソフトでは届かない、その

VBAで自動化できる請求書PDF業務

請求書にまつわる事務作業は、多くの工程が「毎月同じ手順の繰り返し」です。こうした定型業務こそ、VBAによる自動化の恩恵が最も大きい領域といえます。手作業で処理していた工程をVBAに任せることで、作業時間を大幅に短縮できるだけでなく、ヒューマンエラーも防止できます。

手作業によるPDF業務の課題

請求書のPDF作成・送付作業は、取引先が増えるほど工数が膨らみ、月末に集中する負担は深刻です。

典型的な手作業の流れとして、Excelで請求書を開き、取引先ごとにデータを切り替え、印刷範囲を確認し、PDF保存してファイル名を手入力する。さらにOutlookを開いてメールを作成し、添付して送信する。この一連の作業を取引先の数だけ繰り返すことになります。

取引先が30社であれば、PDF保存だけでも30回の操作が必要です。ファイル名の付け間違いや添付漏れといったミスも発生しやすく、二重チェックの工数も加わります。

VBAで自動化できる工程の全体像

VBAを活用すれば、以下の工程をすべてボタン1つで処理できます。個別に自動化することも、全体を一気通貫で処理することも可能です。

Excelシートから請求書をPDFに一括出力
取引先ごとにファイル名を自動付与して保存
複数シートを1つのPDFに結合
フォルダ内のPDFファイルを一括印刷
Outlook連携による自動メール送信

これらの処理は、ExportAsFixedFormatメソッドやOutlookオブジェクトなど、VBAの標準的な機能で実現できます。特別なソフトウェアの追加購入は不要で、今あるExcel環境のままで構築可能です。

手作業とVBA自動化の工数比較

実際の業務でどの程度の差が生まれるのか、取引先30社の請求書発行業務を例に比較します。

作業工程 手作業の所要時間 VBA自動化の所要時間
PDF出力・保存 約60分 約2分
ファイル名付与・整理 約30分 自動処理
メール作成・添付・送信 約90分 約3分
確認・二重チェック 約30分 約10分
合計 約3.5時間 約15分

このように、VBAによる自動化で月間の作業時間を大幅に削減できます。年間に換算すれば、丸3日以上の工数削減につながる計算です。

セルネッツ竹本

PDF出力からメール送付まで、VBAなら一気通貫で処理できます。まずは自社の作業工程を洗い出すことが改善の第一歩です。

VBAでPDFを一括出力する基本手法

請求書業務のVBAによる自動化で、最初に取り組むべきはPDF出力の自動化です。ExcelにはExportAsFixedFormatという標準メソッドが用意されており、シートの内容をそのままPDFとして保存できます。追加ソフトは不要で、VBAエディタにコードを記述するだけで実行可能です。

シート単位でPDFを保存する方法

ExportAsFixedFormatメソッドを使えば、アクティブシートの内容をそのままPDFファイルとして出力できます。

基本的な記述は以下のとおりです。ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=”保存先パス\ファイル名.pdf”という1行で処理が完了します。保存先のフォルダパスとファイル名をコード内で指定するため、手入力によるファイル名のブレが発生しません。

さらに、請求番号や取引先名をセルから取得してファイル名に組み込む方法も一般的です。たとえば「請求書_A社_202506.pdf」のように、コード内で文字列を結合して自動命名すれば、保存後のファイル整理も不要になります。

複数シートをまとめてPDF化する方法

Excelブック内に取引先ごとのシートが存在する場合、全シートを選択した状態でExportAsFixedFormatを実行すれば、1つのPDFファイルにまとめて出力できます。Sheets.Selectで全シートを選択し、そのまま出力する手法です。

逆に、シートごとに個別のPDFファイルとして保存したい場合は、For Eachループで各シートを順番に処理します。シート名をファイル名に反映させれば、「A社_請求書.pdf」「B社_請求書.pdf」のように自動で整理された状態で保存されます。

印刷範囲を指定してPDF出力する方法

請求書テンプレートによっては、シート全体ではなく特定の範囲だけをPDF化したいケースもあります。その場合は、事前にPageSetupオブジェクトで印刷範囲を設定するか、Range指定でPrintAreaを動的に変更してから出力します。

日付や請求番号をファイル名に自動追加する処理を組み合わせれば、出力と同時にファイル管理まで完了します。これにより、保存先フォルダを開いたときに「どの月のどの取引先の請求書か」が一目で判別できる状態を維持できます。

セルネッツ竹本

PDF出力の自動化は、VBAの中でも比較的シンプルな処理です。前任者のマクロにこの機能がなければ、追加するだけで大きな効果が得られます。

VBAによる結合・分割と印刷の自動化

PDF出力の次に実務で求められるのが、ファイルの結合・分割と印刷処理の自動化です。複数の請求書PDFを1つにまとめたい、あるいは逆に取引先ごとに分割して保存したいといった要件は、月次の請求書業務では非常に多く発生します。

複数シートを結合してPDF出力する方法

Excelブック内の複数シートを一度に選択してPDF出力すれば、1つのファイルに結合された状態で保存できます。

具体的には、Sheets(Array(“Sheet1”, “Sheet2”, “Sheet3”)).Selectのようにシート名を配列で指定し、選択状態のままExportAsFixedFormatを実行します。この方法であれば、外部のPDF結合ソフトを使う必要がありません。

動的にシートを選択するには、For Eachループですべてのシートを走査し、条件に合うシート(たとえばシート名に「請求書」を含むもの)だけを配列に格納して一括選択する方法が実用的です。

取引先ごとにPDFを分割保存する方法

1つのExcelシート上に複数の取引先データが並んでいる場合は、VBAでデータを取引先ごとにフィルタリングし、それぞれ別のPDFとして出力する方法が有効です。AutoFilterやAdvancedFilterと組み合わせて、抽出結果のみをPDF化する処理を繰り返します。

保存先フォルダは取引先名で自動作成し、フォルダ構成まで含めて整理する仕組みにすると、後から特定の請求書を探す手間も省けます。MkDirステートメントでフォルダの存在確認と作成を自動化できます。

フォルダ内のPDFを一括印刷する方法

紙の請求書が必要な取引先向けには、PDF出力後の一括印刷も自動化できます。Dir関数でフォルダ内のPDFファイルを順番に取得し、ShellExecuteやAcrobatのオブジェクト経由で印刷コマンドを実行する手法が一般的です。

InStr関数を使えば、ファイル名に「請求書」を含むPDFだけを対象にするフィルタリングも可能です。見積書や納品書が混在するフォルダでも、請求書だけを正確に選んで印刷処理を実行できます。

処理内容 VBAの主な手法 外部ソフトの要否
複数シート→1つのPDFに結合 Sheets().Select + ExportAsFixedFormat 不要
取引先ごとにPDFを分割 AutoFilter + ループ処理 不要
フォルダ内のPDFを一括印刷 Dir + ShellExecute ※PDF閲覧ソフトが必要

※一括印刷にはAdobe AcrobatやAdobe Acrobat Readerなど、PDFを処理できるソフトウェアがインストールされている必要があります。

セルネッツ竹本

結合・分割・印刷はExcelの標準機能とVBAの組み合わせで実現できます。外部ソフトに頼らない分、保守もシンプルに保てるでしょう。

VBAでメール送付まで自動化する方法

請求書PDFの作成と保存が自動化できたら、次はメール送付まで一気に処理する仕組みの構築です。VBAはOutlookと連携できるため、PDFを添付したメールの作成・送信まで自動化が可能です。この工程を加えることで、請求書業務の「作成から送付まで」がボタン1つで完結します。

Outlook連携で添付メールを自動送信

VBAからOutlookオブジェクトを生成し、宛先・件名・本文・添付ファイルをコードで指定すれば、メール送信まで完全に自動化できます。

CreateObject(“Outlook.Application”)でOutlookのインスタンスを取得し、CreateItem(0)で新規メールを生成します。Toプロパティに宛先アドレス、Subjectに件名、Bodyに本文を設定し、Attachments.Addで先ほど保存したPDFファイルを添付します。最後に.Sendメソッドを呼び出せば送信完了です。

取引先ごとのメールアドレスや件名をExcelの管理シートに一覧化しておけば、VBAがその一覧を参照しながらループ処理で全取引先にメールを送信できます。宛先の入力ミスや添付漏れが構造的に発生しなくなる点が大きなメリットです。

送信前の確認処理を組み込む方法

自動送信に不安がある場合は、.Sendの代わりに.Displayメソッドを使うことで、メール画面を表示して内容を確認してから手動で送信することも可能です。段階的に自動化の範囲を広げていくアプローチが実務では安全です。

また、送信ログをExcelシートに記録する処理を組み込めば、「いつ・誰に・どのファイルを送ったか」を一覧で管理できます。送信漏れの確認や監査対応にも役立つ仕組みです。

一気通貫の自動化フローを構築する

PDF出力からメール送付までの一連の処理を1つのプロシージャにまとめれば、ボタン1つで全工程が完了します。具体的な処理フローは以下のとおりです。

管理シートから取引先情報を読み取り
請求書シートにデータを反映
PDFとして指定フォルダに自動保存
Outlookでメールを自動作成・PDF添付
送信(または表示して確認後に送信)

この一連の処理が取引先の数だけ自動で繰り返されます。以前は数時間かかっていた月末の請求書業務が、わずか数分で完了するようになった事例は少なくありません。

セルネッツ竹本

メール送信まで自動化すれば、請求書業務のほぼ全工程がVBAで完結します。送信ログの記録も忘れずに組み込みましょう。

VBAの自動化で失敗しない実務ポイント

VBAによる自動化は非常に強力ですが、実務で安定運用するためにはいくつかの注意点があります。特に、前任者が作成したマクロをベースに改修する場合や、社内にVBAに詳しい担当者がいない場合は、事前に押さえておくべきポイントがあります。

前任者マクロを活かした改修の考え方

前任者が作ったマクロは、プロが見れば原因を特定できることがほとんどです。全面的に作り直す必要はありません。

社内で唯一Excelマクロを組めた前任者が退職し、残されたマクロがブラックボックス化している。こうした状況では、「作り直すしかない」とシステム会社に言われるケースが多く見られます。しかし、Excel VBA専門の技術者であれば、仕様書がなくても既存コードを読み解き、必要な修正だけを加えることが可能です。

既存のマクロにPDF出力やメール送信の機能を追加する形であれば、ゼロから開発するよりも大幅にコストを抑えられます。今あるExcel資産を活かしながら、段階的に自動化の範囲を広げていくのが現実的なアプローチです。

エラー発生時の対処と予防策

VBAマクロの実行中に突然デバッグ画面が表示されると、業務がストップしてしまいます。こうしたエラーの多くは、保存先フォルダの変更、Excelのバージョンアップ、ネットワークドライブの接続切れなど、環境要因によって発生します。

対策としては、On Error GoToステートメントによるエラーハンドリングをコードに組み込むことが基本です。エラーが発生した際にメッセージボックスで原因を通知する仕組みがあれば、担当者がパニックに陥ることなく、状況を把握できます。

自動化を安定運用させるチェック項目

VBAによる自動化を安定して運用するために、以下のチェック項目を定期的に確認することを推奨します。

保存先フォルダのパスが有効かどうか
Outlookが正常に起動・連携できるか
取引先マスタ(管理シート)が最新か
マクロ有効ブック(.xlsm)として保存されているか
Excelの開発タブからマクロが実行できるか

これらの項目は、VBAの知識がなくても担当者が確認可能です。環境変更があった際に真っ先にチェックすることで、多くのエラーを未然に防げます。

専門家への依頼で得られる安心感

VBAのコードを自分で書いて運用することに不安がある場合、Excel VBA専門の開発会社に相談するのも有力な選択肢です。高額なシステム開発は必要ありません。今のExcelを活かした改修・機能追加であれば、数万円から対応できるケースも多くあります。

特に、前任者のマクロを引き継いだ状態で「いつエラーが出るか分からない」という不安を抱えている方は、一度専門家に診てもらうことで、問題の所在と対処法が明確になります。稟議を通すほどの大きな費用ではなく、スポット対応で解決できる場合がほとんどです。

対応内容 費用目安 対応期間
既存マクロの改修・保守 10~15万円 数日~2週間
PDF出力+メール送信の自動化構築 30~50万円 約1~1.5ヶ月
スポット対応(エラー修正等) 3万円~ 即日~数日

※上記はExcel VBA専門会社セルネッツの参考料金です。詳細は個別の要件によって異なります。

セルネッツ竹本

「作り直すしかない」と言われても、既存マクロを活かした改修で解決できるケースは非常に多いです。まずは現状を専門家に診てもらうことをお勧めします。

よくある質問

Q
VBAでPDF出力を自動化するのに、特別なソフトの購入は必要ですか?
A

ExcelのExportAsFixedFormatメソッドを使用するため、PDF出力自体に追加ソフトは不要です。ExcelがインストールされたWindows環境であれば、そのまま利用できます。ただし、フォルダ内のPDFを一括印刷する場合は、Adobe Acrobat Readerなどの閲覧ソフトが必要になります。ご自身の環境で対応可能かどうか不安な場合は、無料相談でお気軽にご確認ください。

Q
前任者が作ったマクロにPDF出力機能を追加してもらうことはできますか?
A

可能です。Excel VBA専門の技術者であれば、仕様書がなくても既存マクロのコードを解析し、PDF出力やメール送信の機能を追加できます。ゼロから作り直す必要はないため、コストも抑えられます。既存マクロの改修・保守は10~15万円程度から対応可能ですので、まずは60分無料の相談会で現状をお聞かせください。

Q
Outlook以外のメールソフトでもVBAによるメール自動送信は可能ですか?
A

VBAの標準的なOutlook連携はMicrosoft Outlookが前提です。「新しいOutlook」にはVBAが対応していないため、メーラーを介さず、SMTPT経由での送信などでストレスなく連続送信も可能です。VBAにPythonを連携させるなどお使いの環境に合わせた最適な方法をご提案できますので、無料相談でお気軽にお問い合わせください。

まとめ

請求書のPDF出力・結合・分割・印刷・メール送付といった一連の定型業務は、VBAによる自動化で大幅に工数を削減できます。ExportAsFixedFormatメソッドやOutlookオブジェクトなど、Excelの標準機能だけで実現可能なため、追加のソフトウェア投資も不要です。

前任者が残したマクロがブラックボックス化している場合でも、Excel VBA専門の技術者であれば、既存コードを活かしながらPDF自動化機能を追加できます。「作り直すしかない」と言われた方も、まずは今あるExcel資産を活かす方法を検討してみてください。

本記事が、請求書業務の効率化において参考となれば幸いです。「自社の環境でどこまで自動化できるか知りたい」「前任者のマクロを診てほしい」といったご相談は、60分無料の相談会で承っています。費用は一切かかりませんので、まずはお気軽にお問い合わせください。



全国対応!お気軽にお問い合わせください ExcelVBAマクロ開発のセルネッツ