・はじめに|請求書のPDF化とメール送信、毎回手作業していませんか?
Excelで請求書を作成していると、
「PDFに変換 → メールに添付 → 宛先入力 → 送信」
という作業を毎月繰り返すことになります。
単純作業とはいえ、件数が増えると時間も手間もかかり、ミスの原因にもなります。
そこで今回は、
Excelの請求書を自動でPDF化し、そのままメール送信まで行うVBA
を、初心者にも分かりやすく解説します。
実務でそのまま使えるコードなので、業務効率化に大きく役立ちます。
(この記事は約5分ぐらいで読めます)
・このVBAでできること
今回紹介するVBAを実行すると、次の処理が自動で行われます。
- Excel請求書をPDFとして保存
- メールソフト(Outlook)を自動で起動
- 宛先・件名・本文を自動入力
- PDFを自動添付
- 送信前の確認画面を表示(自動送信も可能)
「PDF化 → メール送信」の流れを完全自動化できます。
・請求書をPDF化してメール送信するVBA(コピペOK)
以下のコードは Outlook を使用する場合の標準的な方法 です。
Private Sub CommandButton1_Click()
Dim myOutLook As New Outlook.Application
Dim myEmail As Outlook.MailItem
Dim sendEmail As String
'ThisWorkbook.Path部分は保存したい場所に指定します
Range("A1:M28").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & "\請求書.pdf", _
openafterpublish:=True
'メールの下書き
Set myEmail = myOutLook.CreateItem(olMailItem)
With myEmail
'差出人(自分のアドレス)
.SendUsingAccount = Session.Accounts("●●●@gmail.com")
'宛先
.To = Range("n2")
'件名
.Subject = "請求書をお送りいたします。"
'添付ファイル
.Attachments.Add Source:=ThisWorkbook.Path & "\請求書.pdf"
'メール本文
.Body = "いつも大変お世話になっております。" & vbCrLf & vbCrLf & "請求書をお送りいたしますのでご確認いただけますと幸いです。" & sendEmail
'プレーンテキスト形式設定
.BodyFormat = olFormatPlain
'送信(送信せずに下書きしたい場合は.Save、送信したいときは「Send」、画面確認をしたいときは.Display)
.Save
End With
'送信のコードの際「.Display」の場合は削除かコメント化
Set myEmail = Nothing
'送信のコードの際「.Display」の場合は削除かコメント化
myOutLook.Quit: Set myOutLook = Nothing
End Sub
・コードのポイント解説
ファイルのPDF化
Range(“開始セル:終了セル”).ExportAsFixedFormat Type:=xlTypePDF, Filename:=”保存したいフォルダ名\ファイル名.pdf”, openafterpublish:=True
指定範囲、開始セル(例:A1)から終了セル(例:C28)に対してPDF形式(xlTypePDF)にしてFilenameで保存したい場所とファイル名を指定します。openafterpublish:=Trueは保存後にファイルを開いて表示します。
メールの送信(又は下書き)に必要なコード
①Dim 変数名① As New Outlook.Application
インスタンスを生成します。
②Dim 変数名② As Outlook.MailItem
Outlookのメールであることを表す変数。
③Set 変数名② = 変数名①.CreateItem(olMailItem)
メールを生成
④変数名②.SendUsingAccount = Session.Accounts(“●●●@gmail.com”)
差出人を指定します(自分のアドレス等)
⑤変数名②.To = Range(“宛先が入力されているセル”)
宛先を指定します。
⑥変数名②.Subject = “メールの件名”
件名を入力します。
⑦変数名②.Attachments.Add Source:=”フォルダ名\ファイル名.pdf”
メールに添付したいファイルを指定します。
⑧変数名②.Body = “メール本文”
メール本文を入力します。
⑨変数名②.BodyFormat = olFormatPlain
メールの本文をプレーンテキスト形式として設定します。
⑩変数名②.Save
送信(送信せずに下書きしたい場合は.Save、送信したいときは「Send」)
・事前の設定
Outlook(メール)を操作する事前の設定として参照設定を行います。
Excelタブの「開発」→「Visual Basic」→Visual Basicタブの「ツール」→「参照設定」→「Microsoft Outlook ×× Object Library」(××はインストールされているバージョンによって変わります)をチェックしOKをクリックし設定します。

・請求書シートの用意(これはサンプル請求書シートです)
ボタンを配置します。「開発」→「挿入」→「ActiveX」→「コマンドボタン」をクリックして好きな場所に配置して、プロパティから「メール下書き」としております。セルの「N2」には送り先のアドレスを入力しておきます。

・実行手順(初心者でも迷わない)
- Excelの「開発」タブ →「Visual Basic」を開く
- 標準モジュールを挿入
- 上記コードを貼り付け
- 宛先メールアドレスを自分用に変更
- マクロを実行
- PDF化 → メール作成が自動で行われます。
・注意点(実務で使う前に)
- Outlookがインストールされている必要がある
- Outlookは起動しておく必要がある。
- 宛先メールアドレスの入力ミスに注意
- PDF保存先のフォルダ権限に注意
- 自動送信(.Send)を使う場合は特に慎重に
・まとめ|請求書のメール送付はVBAで完全自動化できる
Excelで請求書を管理している場合、
PDF化 → メール送信 の自動化は大きな時短になります。
- 手作業のミスが減る
- 作業時間が短縮される
- 送信漏れを防げる
- 実務で即使える
ぜひ、業務に合わせてカスタマイズしてみてください。
ここまでご覧いただき、誠にありがとうございます。
・ご注意
・掲載されている内容には細心の注意をしてるつもりですが、
間違いやご指摘等がありましたら、「お問い合わせ」からご連絡をいただけますと幸いです。
・掲載されている入力VBAコード等は動作を保証するものではなく、あくまでサンプルとして掲載しております。
・掲載されている入力VBAコード等は自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
・対応バージョン
Excel2021、2019、2016


コメント