「毎月末の請求書メールの作成や送信に時間がかかっている…」
「複数のクライアントに一斉に請求書メールを送信したい」
毎月の請求書メールの送信を手作業で行うのは大変ではありませんか?
メール送信を自動化したいなら、Excelマクロが便利です。
本記事では、請求書メールを自動送信するマクロの作り方を解説します。実際に使用できるサンプルコードも紹介しているため、ぜひ参考にしてください。
クラリテでは、Excelマクロ・VBAの開発サービスを提供しています。
「マクロの作り方が難しくてよくわからない」「自社のフォーマットに合ったマクロを開発してほしい」という方は、ぜひクラリテまでご相談ください。
エクセルマクロ・VBA開発/作成 基本料金10,000円〜
Outlookとの連携による自動メール送信機能や、Word、PowerPointと連動した業務の効率化を実現いたします。お客様の業務フローやニーズに合わせた完全カスタマイズ対応が可能です。まずはお気軽にご相談ください。
エクセルマクロ・VBA開発/作成のサービス詳細はこちら
請求書メールの自動送信マクロを作成するプロセスは、大きく3つのステップに分けられます。
マクロで請求書メールを自動送信するには、いきなりコードを書き始めるのではなく、事前の準備を行うことが大切です。
それぞれのステップについて詳しく見ていきます。
自動化の最初のステップは、送信に必要なすべての情報をExcelシートに整理することです。
正確な情報や構成でシートを準備しておかないと、エラーが多く、メンテナンスが困難なマクロを生み出す原因となります。
Excelシートに書くべき情報の一例は下記です。
【取引先名】
送信先の正式名称。メール本文の宛名に使用します。
【担当者名】
送信先の担当者名。本文の挨拶で使用します。
【メールアドレス(To)】
メインの送信先メールアドレス。マクロがメールを送信する宛先です。
【メールアドレス(CC)】
CCに追加するメールアドレス。複数ある場合はセミコロン(;)で区切ります。
【請求書ファイル名】
添付する請求書PDFのファイル名。取引先ごとに異なるファイルを正確に添付するために不可欠です。
【請求書フォルダ】
請求書ファイルが保存されているフォルダの場所。マクロが添付ファイルを正確に見つけ出すために必要です。(例:「C:\Users\YourName\Documents\Invoices\」)
【送付チェック】
マクロ実行の対象とするかどうかの目印。全員に送るのではなく、特定の請求先だけを選んで送信する柔軟性を持たせるためです。誤送信防止にも役立ちます。
自社の請求書メール送付時に記載している内容をもとにして決めるとスムーズです。
次に、送信するメールの件名と本文のテンプレートを作成します。受け取った側が一目で内容を理解でき、かつ丁寧な印象を与える文面を準備することが重要です。
下記は、メール本文のテンプレート例です。
件名:【請求書の送付】[請求月]分請求書(株式会社クラリテ)
[取引先名]
[担当者名]
いつも大変お世話になっております。
株式会社クラリテの[自社担当者名]です。
[請求月]分の請求書をPDFファイルにて添付いたしました。
ご査収のほど、よろしくお願い申し上げます。
————————————
請求番号:[請求書番号]
請求金額:[請求金額]円
お支払期日:[支払期日]
————————————
添付ファイルが開けない等、ご不明な点がございましたら、
お手数ですが本メールまでご連絡ください。
今後とも、何卒よろしくお願い申し上げます。
————————————
株式会社クラリテ
[部署名][自社担当者名]
電話番号:XX-XXXX-XXXX
メール:XXXX@clarite.co.jp
本文テンプレートは、Excelシートの空きスペースに準備しておきましょう。
データとテンプレートの準備が整ったら、いよいよExcelでマクロを実行するための環境設定を行います。
まずはExcel内に「開発」のタブを表示させましょう。(すでに表示がある場合は不要)
ファイルタブ内のオプションをクリックします。Excelのオプションが表示されたら、「リボンのユーザー設定」から「開発」にチェックを入れます。

すると、Excelのタブに「開発」が表示されます。

次に、開発タブ内の「マクロのセキュリティ」をクリックし、「マクロの設定」が「警告を表示してすべてのマクロを無効にする」になっているかを確認しましょう。
これは、意図しないマクロが勝手に実行されるのを防ぐための安全な設定です。

ここまでの設定が完了したら、開発タブ内の「Visual Basic」ボタンをクリックして、マクロを記述するための専用エディタを開きます。
メニューから「挿入」→「標準モジュール」を選択すると、白紙のコードウィンドウが表示されます。

このウィンドウに請求書メールを自動送信するためのコードを書いていくイメージです。

ここからは、実際に動作するVBAのサンプルコードを3つ紹介します。
具体的なコードを記載しているため、マクロを作成する際の参考にしてください。
Excelの特定の行の情報を読み取り、Outlookでメールを1通作成するコードです。
g’ Outlookを操作するための準備
Dim OutlookApp As Object
Set OutlookApp = CreateObject(“Outlook.Application”)
‘ 新しいメールを作成
Dim mail As Object
Set mail = OutlookApp.CreateItem(0)
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(“送信リスト”)
‘ — Excelから情報を読み取りメールを作成 —
With mail
‘ 宛先 (D列から)
.To = ws.Cells(2, “D”).Value' 件名 (B列とE列を組み合わせて作成) .Subject = "【" & ws.Cells(2, "B").Value & "】" & ws.Cells(2, "E").Value & "分のご請求書" ' 本文 (B列、C列の情報を差し込む) .Body = ws.Cells(2, "B").Value & vbCrLf & _ ws.Cells(2, "C").Value & " 様" & vbCrLf & _ vbCrLf & _ "いつもお世話になっております。" & vbCrLf & _ "株式会社クラリテです。" & vbCrLf & _ vbCrLf & _ ws.Cells(2, "E").Value & "分のご請求書をPDFファイルにてお送りいたします。" & vbCrLf & _ "ご査収のほど、よろしくお願い申し上げます。" & vbCrLf & _ vbCrLf & _ "---" & vbCrLf & _ "署名など" ' 添付ファイル (F列のパスを使用) If ws.Cells(2, "F").Value <> "" Then .Attachments.Add ws.Cells(2, "F").Value End If ' メールを下書きとして表示 (.Sendにすると自動送信) .Display
End With
‘ 後片付け
Set mail = Nothing
Set OutlookApp = Nothin
このコードを実行すると、Excelシート2行目の情報に基づいたメールがOutlookで作成され、画面に表示されます。
「.Display」で下書きを表示するようにしているため、送信前に内容を最終確認することが可能です。
リストの複数行をチェックして、A列に「✓」が付いている行だけを連続で送信する「ループ処理」を行うコードです。
‘ (Outlookの準備部分は省略)
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(“送信リスト”)
‘ 最終行を取得して、2行目から最終行までループ
Dim i As Long
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, “B”).End(xlUp).Row
For i = 2 To lastRow' --- A列に「〇」があるかチェック --- If ws.Cells(i, "A").Value = "〇" Then
‘ 新しいメールを作成
Dim mail As Object
Set mail = OutlookApp.CreateItem(0)
With mail
‘ 宛先 (i行目のD列から)
.To = ws.Cells(i, “D”).Value
‘ 件名 (i行目のB列とE列を組み合わせて作成)
.Subject = “【” & ws.Cells(i, “B”).Value & “】” & ws.Cells(i, “E”).Value & “分のご請求書”' 本文 (B列、C列の情報を差し込む) .Body = ws.Cells(2, "B").Value & vbCrLf & _ ws.Cells(2, "C").Value & " 様" & vbCrLf & _ vbCrLf & _ "いつもお世話になっております。" & vbCrLf & _ "株式会社クラリテです。" & vbCrLf & _ vbCrLf & _ ws.Cells(2, "E").Value & "分のご請求書をPDFファイルにてお送りいたします。" & vbCrLf & _ "ご査収のほど、よろしくお願い申し上げます。" & vbCrLf & _ vbCrLf & _ "---" & vbCrLf & _ "署名など" ' 添付ファイル (F列のパスを使用) If ws.Cells(2, "F").Value <> "" Then .Attachments.Add ws.Cells(2, "F").Value End If
‘ 送信後に送信ステータスを更新
.Send ‘ ここでは自動送信
ws.Cells(i, “G”).Value = “送信済み”
End With
Set mail = Nothing
End If ‘ 「〇」のチェック終了
Next i ‘ 次の行へ
‘ (後片付け部分は省略)
「For i = 2 To lastRow」でリストを一行ずつ見ていくループ処理を行います。
また、「If ws.Cells(i, “A”).Value = “〇” Then」で送信対象を絞り込むことが、一括送信の鍵です。
安全性を高めるための「エラーチェック機能」のコードです。メールアドレスや添付ファイルパスが空欄の場合に、処理を中断してメッセージを表示します。
‘ (ループ処理の内部)
‘ — A列に「〇」があるかチェック —
If ws.Cells(i, “A”).Value = “〇” Then
‘ — ★エラーチェックを追加★ —
‘ メールアドレスが空欄かチェック
If ws.Cells(i, “D”).Value = “” Then
MsgBox i & “行目のメールアドレスが未入力です。処理を中断します。”
Exit Sub ‘ マクロを強制終了
End If
‘ 添付ファイルパスが空欄かチェック
If ws.Cells(i, “F”).Value = “” Then
MsgBox i & “行目の添付ファイルパスが未入力です。処理を中断します。”
Exit Sub ‘ マクロを強制終了
End If
‘ — ★エラーチェック終了★ —
End If
「MsgBox」で警告を出し、「Exit Sub」で処理を止めることで、意図しないメールの送信を防げるようになっています。
本格的なツールにするには、こうした事前チェックが不可欠です。
マクロの自作には、専門的な知識と経験が求められるため、多くの方が途中で挫折してしまうのが現実です。挫折する理由として、下記の3つがあります。
ネット上にあるサンプルコードをコピー&ペーストするだけでは解決できない問題が実務では頻繁に発生します。それぞれの理由について詳しく見ていきましょう。
Excelマクロでは、「VBA」という専門的なプログラミング言語を動かします。VBAにはルールがあるため、理解していないと少しコードを変えるだけでエラーを引き起こしてしまいます。
これは、知らない外国語の文章を作成するときと似ています。単語の意味を数個理解できたとしても、文法がわからないと文章を作れないのと同じです。
「メールの文章の順番を少し変えたい」「CCの他にBCCも追加したい」といった簡単な変更でさえ、VBAのルールを理解していないと、エラーが出て動かなくなってしまう可能性があります。
自作マクロで最も時間を浪費するのが、エラーの解決です。
たった一つのスペルミスや、参照設定の漏れ、あるいはOfficeのアップデートといった外部環境の変化によって、昨日まで動いていたマクロが突然停止することも少なくありません。
また、表示されるエラーメッセージは専門的で、プログラミング経験がないと解読が困難です。
マクロに対する理解が十分にない人が、原因を特定するためにインターネットで情報を探し、試行錯誤を繰り返すことは非現実的だといえるでしょう。
作成者本人にしか分からないロジックやファイル構成で作られたマクロは、業務プロセスの変更やシステムのアップデートに対応できません。
つまり、自作マクロは属人化しやすく、作成した本人が異動や退職をしてしまうと誰もメンテナンスできなくなってしまいます。
結果として、せっかく自動化した業務が再び手作業に戻ってしまったり、最悪の場合、業務そのものが停止してしまったりする危険性をはらんでいます。
新規はもちろん、既存マクロの修正・改修にも対応可能です
メールアドレス一覧をもとにした一括送信(Outlook連携)や、データ集計・分析用Excelレポートの自動作成などをサポートいたします。新規のマクロ作成だけでなく、既存分の修正・改修にも対応可能ですので、お気軽にご相談ください。
エクセルマクロ・VBA開発/作成のサービス詳細はこちら
マクロには専門的な知識が必要なため、高品質で安定したツールを開発したいなら外注がおすすめです。
プロなら、将来の仕様変更やメンテナンスを前提とした、構造化された読みやすいコードを記述できます。誰が使用しても安定して動作するツールを開発できるため、属人化のリスクを根本から排除することも可能です。
また、マクロ開発を専門家に任せることで、社員は本来の専門業務に集中できます。不慣れなプログラミングやエラー処理に時間を費やす必要はありません。
外注費はかかりますが、高品質かつ迅速に自動化を進めるなら、プロへの依頼が賢明な選択だといえるでしょう。
Excelマクロ・VBAの開発ならクラリテにお任せください
クラリテが多くの企業から信頼をいただいている理由は、迅速かつ正確な開発力、そして高い信頼性にあります。日々の繰り返し作業や煩雑なデータ処理を自動化したいとお考えなら、ぜひ一度クラリテにご相談ください。
エクセルマクロ・VBA開発/作成のサービス詳細はこちら
本記事で紹介したマクロは、請求書メール送信を自動化するための第一歩です。
しかし、実際のビジネス現場で求められるのは、各社独自の運用フローに完璧に適合し、誰でも安心して長期間使い続けられる信頼性の高いツールです。
クラリテなら、お客様の既存の請求書フォーマットや業務プロセスを詳細にヒアリングし、最適な自動化システムをオーダーメイドで開発します。
Outlookとの連携による自動メール送信機能はもちろん、Word、PowerPointと連動した業務効率化のサポートも可能です。
「マクロの作り方が難しくてよくわからない」「自社のフォーマットに合ったマクロを開発してほしい」という方は、ぜひクラリテまでご相談ください。
エクセルマクロ・VBA開発/作成 基本料金10,000円〜
Outlookとの連携による自動メール送信機能や、Word、PowerPointと連動した業務の効率化を実現いたします。お客様の業務フローやニーズに合わせた完全カスタマイズ対応が可能です。まずはお気軽にご相談ください。
エクセルマクロ・VBA開発/作成のサービス詳細はこちら
事務作業・入力作業はクラリテにお任せ!
お気軽にお見積もり・お問い合わせください。
サービス情報の資料を無料でご確認いただけます。