複数の送信先に異なる本文のメールを一斉に送信(Outlook)

複数の送信先に異なる本文のメールを一斉に送信する。

VBAでメール(Outlook)を複数の送信先に、それぞれ本文を編集して異なる本文のメールを一斉に送信するための処理です。

※VBAでOutlookのメールを作成、送信する処理自体は下記のリンクのページに記載しています。
  メールの作成と送信(Outlook)
※サンプルコードでは誤って実行した時に誤送信しないようにSendメソッドをコメントアウトしています。その代わりDispalyメソッドで代用してメールの確認をするようにしています。

宛先などの設定はメール設定シートを作成し、その情報を元にメールを一斉に送信するようにしています。

設定シートについては下記の画像のように作成しています。
件名をB2セル、本文をB4セル(セル結合してます)に記載しています。
本文内で送信先ごとに内容を変えたい部分を<>で括り、その文字列の部分を置換させて本文を個々編集させています。
例文では<TO_NAME>、<EVENTDAY>、<LOCATION>の部分が置換対象となり、それぞれ設定シートのG~I列の内容に置換されるようにしています。

D列に送信先アドレス、E列とF列はCCとBCCの送信先を指定します。(複数ある場合は ; で区切る)
G列以降はそれぞれ本文に反映させたい内容を記載しています。

 ●個々本文を編集して個別に送信

'設定シート
Const SHT_MAIL = "Mail"

'置換用文字列
Const REPSTR_RECEIVER = "<TO_NAME>"
Const REPSTR_EVENTDAY = "<EVENTDAY>"
Const REPSTR_LOCATION = "<LOCATION>"

'*********************************************************************
' 複数名に個々送信(シートの情報を元にメールの作成・送信)
'*********************************************************************
Sub sendMail_eachPerson()

    '件名・本文・送信者名取得
    Dim sSubject As String
    sSubject = Sheets(SHT_MAIL).Range("B2")

    Dim sBody As String
    sBody = Sheets(SHT_MAIL).Range("B4")


    '個々の編集・送信
    Dim i As Long
    Dim j As Long
    Dim sTo As String
    Dim sToName As String
    Dim sCc As String
    Dim sBcc As String
    Dim sLoc As String
    Dim sEvt As String
    Dim sBodyTemp As String
    
    For i = 2 To 10
        '宛先(To)が空行であればループを抜ける
        If Trim(Sheets(SHT_MAIL).Cells(i, 4)) = "" Then: Exit For
    
        'TO、CC、BCCなどを取得
        sTo = Sheets(SHT_MAIL).Cells(i, 4)
        sCc = Sheets(SHT_MAIL).Cells(i, 5)
        sBcc = Sheets(SHT_MAIL).Cells(i, 6)
        
        '本文反映内容の取得
        sToName = Sheets(SHT_MAIL).Cells(i, 7)
        sEvt = Sheets(SHT_MAIL).Cells(i, 8)
        sLoc = Sheets(SHT_MAIL).Cells(i, 9)
        
        '本文を個別に編集
        sBodyTemp = Replace(sBody, REPSTR_RECEIVER, sToName)   '置換1
        sBodyTemp = Replace(sBodyTemp, REPSTR_EVENTDAY, sEvt)  '置換2
        sBodyTemp = Replace(sBodyTemp, REPSTR_LOCATION, sLoc)  '置換3


        'メール作成、送信
        Call sendMail(sTo, sSubject, sBodyTemp, sCc, sBcc, 1, 2)

    Next
    
End Sub

'*********************************************************************
' メール作成・送信
'*********************************************************************
Sub sendMail(mlTo As String, mlSubject As String, mlBody As String, _
             Optional mlCc As String, Optional mlBcc As String, _
             Optional mlFromat As Long = 1, _
             Optional mlImportance As Long = 1)

    'アプリケーションオブジェクト
    Dim oMailApp As Object
    Set oMailApp = CreateObject("Outlook.Application")
    
    'メール作成
    Dim oMail As Object
    Set oMail = oMailApp.CreateItem(0)
    
    '形式(1:テキスト型、2:HTML型、3:リッチテキスト型)
    oMail.BodyFormat = mlFromat
                
    '重要度(0:低、1:中(規定値)、2:高)
    oMail.Importance = mlImportance
                
    '宛先
    oMail.To = mlTo   'TO
    oMail.cc = mlCc    'CC
    oMail.bcc = mlBcc   'BCC
        
    '件名
    oMail.Subject = mlSubject
        
    '本文
    oMail.Body = mlBody
        
    '送信実行
    '※サンプルでは誤送信しないようにSendメソッドをコメントアウトし、
    ' Dispalyメソッドで代用しています。
    ''oMail.Send
     oMail.Display  'メール表示 ※Sendの代わりに使用

    Set oMail = Nothing
    Set oMailApp = Nothing
    
End Sub

 ■実行結果

作成されたメール、宛名、日付、場所がメールごとに異なるようになっています。