📊 Excel VBA Top100
⚡

SendEmailWithAttachment

自動化

Outlookを使って現在のブックを添付ファイルとしてメール送信します

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

SendEmailWithAttachment デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(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