⚡
SendEmailWithAttachment
自動化Outlookを使って現在のブックを添付ファイルとしてメール送信します
ExcelからOutlookを介して指定した宛先にメールを自動送信するマクロです。アクティブブックまたは指定したファイルを添付し、件名・本文・宛先をマクロで設定できます。月次報告書の定期送信・データ更新完了の通知・期限アラートのメール送信など、メール送信業務の自動化に活用できます。毎回同じ内容のメールを手動で作成・送信する繰り返し作業を解消します。内部ではCreateObject("Outlook.Application")でOutlookを操作し、MailItemオブジェクトのAttachments.Addでファイルを添付してSendメソッドで送信します。CreatePDFExportと組み合わせてPDF化した直後のファイルパスをそのまま添付指定すれば、資料作成から配信までを1つのマクロ実行で完結できます。

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: SendEmailWithAttachment を実行し、宛先・件名を入力します(Outlook必須)
🎯 活用シーン
- ✓月末に月次報告書をPDFに変換して上司や関係者に自動メール送信する処理を組み込み、報告業務を効率化したいとき
- ✓在庫が安全在庫を下回った商品を検知した際に、自動的に担当者へ補充依頼メールを送信するアラートシステムを作りたいとき
- ✓データ更新完了を関係者にメールで通知するフローを自動化して、完了連絡の手間を省き、タイムリーな情報共有を実現したいとき
- ✓毎週の進捗報告書を自動作成し、関係者全員へ定時に一斉送信したいとき
- ✓クレームやエラーを検知した際に、該当データを添付して担当者へ即座に自動通知したいとき
💡 実装のヒント
- ▸Outlook以外のメールクライアントでは動作しません。Outlookがインストールされ、メールアカウントが設定されている環境が必要です。
- ▸現在のシートをPDFに変換して添付する場合は、CreatePDFExportマクロと組み合わせて使用できます。
- ▸送信前に確認ダイアログを表示するか、自動送信するかをユーザーが選択できるように設計すると、誤送信のリスクを低減できます。
- ▸宛先リストが多い場合はCCやBCCを配列で管理し、ループで宛先を追加する設計にすると保守が容易になります。
- ▸送信前にメール内容を確認したい場合はSendの代わりにDisplayメソッドを使うと、下書き状態で内容を確認してから手動送信できます。
💻 VBAコード
' SendEmailWithAttachment
' -----------------
' Macro Name: SendEmailWithAttachment
' Description: Outlookを使って現在のブックを添付ファイルとしてメール送信します
' Parameters: なし
' Returns: なし
' Usage: SendEmailWithAttachment を実行し、宛先・件名を入力します(Outlook必須)
' -----------------
Sub SendEmailWithAttachment()
On Error GoTo ErrorHandler
Dim wb As Workbook
Dim outlookApp As Object
Dim mailItem As Object
Dim toAddress As String
Dim subject As String
Set wb = ActiveWorkbook
If wb.Path = "" Then
MsgBox "先にブックを保存してください", vbExclamation, "注意"
Exit Sub
End If
toAddress = InputBox("宛先メールアドレスを入力してください", "宛先")
If toAddress = "" Then Exit Sub
subject = InputBox("件名を入力してください", "件名", wb.Name & " を送付します")
If subject = "" Then Exit Sub
Set outlookApp = CreateObject("Outlook.Application")
Set mailItem = outlookApp.CreateItem(0)
With mailItem
.To = toAddress
.Subject = subject
.Body = "お世話になっております。" & vbCrLf & "ファイルを添付いたします。"
.Attachments.Add wb.FullName
.Display
End With
MsgBox "メール作成画面を表示しました。内容を確認して送信してください。", vbInformation, "完了"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & vbCrLf & Err.Description & vbCrLf & _
"(Outlookがインストールされていない場合は使用できません)", vbCritical, "エラー"
End Sub