請求書を自動でPDF化してメール送信するVBA|Excelだけで完結する業務効率化術

ExcelVBA

・はじめに|請求書の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」には送り先のアドレスを入力しておきます。

・実行手順(初心者でも迷わない)

  1. Excelの「開発」タブ →「Visual Basic」を開く
  2. 標準モジュールを挿入
  3. 上記コードを貼り付け
  4. 宛先メールアドレスを自分用に変更
  5. マクロを実行
  6. PDF化 → メール作成が自動で行われます。

・注意点(実務で使う前に)

  • Outlookがインストールされている必要がある
  • Outlookは起動しておく必要がある。
  • 宛先メールアドレスの入力ミスに注意
  • PDF保存先のフォルダ権限に注意
  • 自動送信(.Send)を使う場合は特に慎重に

・まとめ|請求書のメール送付はVBAで完全自動化できる

Excelで請求書を管理している場合、
PDF化 → メール送信 の自動化は大きな時短になります。

  • 手作業のミスが減る
  • 作業時間が短縮される
  • 送信漏れを防げる
  • 実務で即使える

ぜひ、業務に合わせてカスタマイズしてみてください。
ここまでご覧いただき、誠にありがとうございます。

・ご注意

・掲載されている内容には細心の注意をしてるつもりですが、
間違いやご指摘等がありましたら、「お問い合わせ」からご連絡をいただけますと幸いです。
・掲載されている入力VBAコード等は動作を保証するものではなく、あくまでサンプルとして掲載しております。
・掲載されている入力VBAコード等は自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
・対応バージョン
 Excel2021、2019、2016

コメント