Outlook でメールを一括作成・送信する(添付ファイル付き)

公開日:2026年10月4日 執筆:Takuya カテゴリ:帳票・メール連携

宛先一覧から Outlook のメールを1件ずつ作成し、添付ファイルを付けて送信するマクロです。いきなり送信せず下書きで確認する方法や、誤送信を防ぐ工夫も解説します。

どんな場面で使うか

請求書や案内文を、取引先ごとに宛名と添付ファイルを変えて送る作業です。Excel の一覧から Outlook を操作すれば、宛先・件名・本文・添付ファイルを自動で組み立てられます。

ただし、メールの送信は取り消しができません。最初は「下書きとして保存」や「画面に表示」で中身を確認し、問題がないことを確かめてから送信に切り替える運用をおすすめします。

準備

PC に Outlook(デスクトップ版)が入っていて、送信に使うアカウントが設定されている必要があります。新しい Outlook(Web 版ベース)や Web ブラウザの Outlook では、この方法は使えません。

  • 「送信一覧」シート:A列 会社名、B列 担当者名、C列 メールアドレス、D列 添付ファイルのパス、E列 送信結果(マクロが書き込む)

コード

mode の値で動きを切り替えます。0 は画面に表示(1件ずつ確認)、1 は下書き保存、2 は送信です。添付ファイルが見つからない行は飛ばして、結果列に理由を書き込みます。

Sub SendMails(Optional ByVal mode As Integer = 1)
    Dim ol As Object, mail As Object, ws As Worksheet
    Dim lastRow As Long, i As Long, body As String

    Set ws = ThisWorkbook.Worksheets("送信一覧")
    Set ol = CreateObject("Outlook.Application")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    For i = 2 To lastRow
        If ws.Cells(i, "E").Value = "" Then             ' 未処理の行だけ
            If Dir(ws.Cells(i, "D").Value) = "" Then
                ws.Cells(i, "E").Value = "添付ファイルなし"
            Else
                body = ws.Cells(i, "A").Value & vbCrLf & ws.Cells(i, "B").Value & " 様" & vbCrLf & vbCrLf & _
                       "いつもお世話になっております。" & vbCrLf & _
                       Format(Date, "m") & "月分の請求書をお送りいたします。" & vbCrLf & _
                       "ご確認のほど、よろしくお願いいたします。"
                Set mail = ol.CreateItem(0)                ' 0 = メール
                With mail
                    .To = ws.Cells(i, "C").Value
                    .Subject = Format(Date, "m") & "月分 請求書送付のご案内(" & ws.Cells(i, "A").Value & "様)"
                    .Body = body
                    .Attachments.Add ws.Cells(i, "D").Value
                    Select Case mode
                        Case 0: .Display
                        Case 1: .Save
                        Case 2: .Send
                    End Select
                End With
                ws.Cells(i, "E").Value = Choose(mode + 1, "表示", "下書き保存", "送信") & " " & Format(Now, "m/d h:nn")
            End If
        End If
    Next i
    MsgBox "処理が終わりました"
End Sub

誤送信を防ぐ工夫

このマクロは、E列(送信結果)が空の行だけを処理します。途中で止まって再実行しても、送信済みの相手にもう一度送ってしまうことがありません。また、既定の動きを「下書き保存」にしているので、引数を指定せずに実行しても、いきなり送信されることはありません。

  • 最初は mode=0(表示)で数件だけ試す
  • 下書き保存で全件を作り、件名・宛先・添付を確認してから送る
  • 宛先のアドレスは一覧の段階で二重チェックする
  • 送信結果を一覧に記録し、再実行で二重送信しない

セキュリティの警告が出る場合

会社の設定によっては、プログラムからメールを送ろうとすると、Outlook が警告を表示したり、送信を止めたりすることがあります。これは不正なプログラムによる勝手な送信を防ぐための仕組みなので、無理に回避せず、情報システム部門に利用してよいかを確認してください。

※メールの文面は一例です。実際の送信前に、宛先・添付ファイル・本文を必ず確認してください。

ほかの記事