【エクセルVBA】エクセルシートに一覧化された複数の連絡先に本文を変えつつOutlookでメールを一括送信する方法


エクセルvba,メール一括送信

みなさまこんにちは、ノグチです。

前回は、エクセルVBAからOutlookを操作して、エクセルシートに記入された内容を、メールの件名と本文にセットして、Outlookからメールを送信させる方法をご紹介しました。

【エクセルVBA】Outlookでメールを作成・送信する方法
エクセルシートに記入された件名や本文を、エクセルVBAによってOutlookのメールの件名と本文にセットしてメール送信する方法をご紹介しています。VBAでメールの送信ができれば、宛先に応じてメールの本文を変えつつ一斉に送信することもできますよ。

仕事の取引先にメールをする際、メールの冒頭には相手の会社名、部署名、担当者名を入れたりしますよね。

ビジネスメールのマナーとはいえ、1件、2件ならまだしも、10件、20件となってくると中々苦痛な作業です。

コピー&ペーストしたとしても、会社名や名前を間違ってコピペしてしまっていたらもう最悪です。

ミスの防止と手間削減のために、それ、エクセルVBAで自動化してしまいましょう!

今回は、前回ご紹介したエクセルVBAでメールを送信するコードにFor~Nextを加えて、エクセルシートに一覧化された複数のメールアドレスに、メール本文を変えつつメールを一括送信する方法をご紹介します!

スポンサーリンク

エクセルシートに一覧化された送信先に一括でメールを送りたい

例えば、こちらのリスト。vba,エクセルシート,送信先

リストのD列にあるメールアドレスに、メールの本文にA列の会社名、B列の部署名、C列の担当者名を盛り込みつつ、メールを送信したいとします。

メール本文のテンプレートがこちらのシート。メール本文,エクセルシート,vba,outlook

B2セルにあるメール本文の冒頭に送信先シートにある会社名、部署名、担当者名を追加しつつ、メールを送っていきます。

本文を変えつつ複数メールアドレスにメールを一括送信するコード

上の送信先シートの送信先に、メール内容シートの本文と送信先シートの情報を結合させてメール送信するコードがこちら。

何も難しいことはありません。

前回の記事でご紹介したコードのCreateItemメソッドでMailItemオブジェクトを作成する部分からSendメソッドでメール送信する部分をFor~Next文で挟んで、With文とメール本文を加工するステップを修正しただけという、結構単純なコードです。

(CreateItemメソッドとMailItemオブジェクトについては、前回記事をご覧ください。)

Sub SendEmail()

Dim objOutlook As Outlook.Application
Dim i
Dim rowMax As Long
Dim wsList As Worksheet
Dim wsMail As Worksheet
Dim objMail As Outlook.MailItem

Set objOutlook = New Outlook.Application
Set wsList = ThisWorkbook.Sheets("送信先")
Set wsMail = ThisWorkbook.Sheets("メール内容")

With wsList

    '送信先の件数
    rowMax = .Cells(Rows.Count, 1).End(xlUp).Row

    '送信先の件数分繰り返す
    For i = 2 To rowMax
        Set objMail = objOutlook.CreateItem(olMailItem)
        With wsMail
            .To = wsList.Cells(i, 4).Value       'メール宛先
            .Subject = .Range("B1").Value        'メール件名
            .BodyFormat = olFormatPlain          'メールの形式
            .Body = wsList.Cells(i, 1).Value & vbCrLf & _
                         wsList.Cells(i, 2).Value & " " & _
                         wsList.Cells(i, 3).Value & " 様" & vbCrLf & vbCrLf & _
                        .Range("B2").Value              'メール本文
    
           objMail.Send
        End With
    Next i

    Set objOutlook = Nothing
    MsgBox "送信完了"

End With

End Sub

CreateItemメソッドの場所に注意

上のコードのご紹介文でも書いた通り、MailItemオブジェクトを作成するCreateItemメソッドは、For~Next文の中に書くようにします。

CreateItemメソッドでMailItemオブジェクトを作成するのは、言うなればOutlookで「新しいメール」ボタンをクリックしていることと同義です。

この処理がFor~Next文の中に無いと折角プロパティの指定をしても、そもそもプロパティをセットする「新しいメール」が無いのでエラーになってしまいます。

上のコードで作成されたメール

上のコードによって、Outlookで作成されたメールはこんな感じになります。

vba,meilitem,メール,outlook

宛先には送信先がセットされて、本文の冒頭は、メール内容シートの本文に送信先シートの会社名、部署名、担当者名が追加されていますね。

これで、メール本文を変えつつ複数の送信先へメール送信ができますよ!

最後に

今回は、エクセルシートに一覧化された連絡先に、本文を変えつつOutlookでメールの一斉送信をする方法をご紹介しました。

「メールを沢山送りたい、本文は定型文でいいけど、文頭だけは相手の名前を入れないと失礼…仕方ない、1件ずつコピペで本文を作ってメール送信しよう。」

これ、私が昔在籍していた総務担当者が実際にやっていたことなんです。

一言相談してもらえれば、今回の記事のような方法を伝えられたのにな…という反省の念を込めての今回の方法のご紹介でした。

それでは、最後までお読みいただきありがとうございました!

次回記事で、VBAで作成したメールの下書きの内容を、メール送信前にチェックする方法をご紹介しています。

エクセルVBAでOutlookメールの下書きを作成・表示して送信前に内容チェックする
OutlookのMailItemオブジェクトのDisplayメソッドを使って、VBAで作成したOutlookのメール内容を、メール送信前にチェックする方法をご紹介しています。「VBAでメールを作成するのは便利だけど、内容をチェックしないでメール送信してしまうのは心配...」という方にお勧めです。

連載目次:エクセルVBAでOutlookを操作してみよう!

エクセルVBAでOutlookのメール作成、送信などの操作をする方法をご紹介しています。メーラーとして便利なOutlookですが、VBAと組み合わせて更に便利に使ってしまいましょう。

  1. 【エクセルVBA】エクセルVBAでOutlookを操作しよう!参照設定とOutlookアプリケーションオブジェクトの取得
  2. 【エクセルVBA】Outlookでメールを作成・送信する方法
  3. 【エクセルVBA】エクセルシートに一覧化された複数の連絡先に本文を変えつつOutlookでメールを一括送信する方法
  4. エクセルVBAでOutlookメールの下書きを作成・表示して送信前に内容チェックする
  5. エクセルVBAでOutlookの連絡先を登録する方法
  6. 【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
  7. エクセルVBAでOutlookの受信メールフォルダとサブフォルダ名を書き出す方法
  8. エクセルVBAでOutlookの受信メールをワークシートに書き出す方法

タイトルとURLをコピーしました