みなさまこんにちは、ノグチです。
前回は、エクセルVBAからOutlookを操作して、エクセルシートに記入された内容を、メールの件名と本文にセットして、Outlookからメールを送信させる方法をご紹介しました。
仕事の取引先にメールをする際、メールの冒頭には相手の会社名、部署名、担当者名を入れたりしますよね。
ビジネスメールのマナーとはいえ、1件、2件ならまだしも、10件、20件となってくると中々苦痛な作業です。
コピー&ペーストしたとしても、会社名や名前を間違ってコピペしてしまっていたらもう最悪です。
ミスの防止と手間削減のために、それ、エクセルVBAで自動化してしまいましょう!
今回は、前回ご紹介したエクセルVBAでメールを送信するコードにFor~Nextを加えて、エクセルシートに一覧化された複数のメールアドレスに、メール本文を変えつつメールを一括送信する方法をご紹介します!
エクセルシートに一覧化された送信先に一括でメールを送りたい
例えば、こちらのリスト。
リストのD列にあるメールアドレスに、メールの本文にA列の会社名、B列の部署名、C列の担当者名を盛り込みつつ、メールを送信したいとします。
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で作成されたメールはこんな感じになります。
宛先には送信先がセットされて、本文の冒頭は、メール内容シートの本文に送信先シートの会社名、部署名、担当者名が追加されていますね。
これで、メール本文を変えつつ複数の送信先へメール送信ができますよ!
最後に
今回は、エクセルシートに一覧化された連絡先に、本文を変えつつOutlookでメールの一斉送信をする方法をご紹介しました。
「メールを沢山送りたい、本文は定型文でいいけど、文頭だけは相手の名前を入れないと失礼…仕方ない、1件ずつコピペで本文を作ってメール送信しよう。」
これ、私が昔在籍していた総務担当者が実際にやっていたことなんです。
一言相談してもらえれば、今回の記事のような方法を伝えられたのにな…という反省の念を込めての今回の方法のご紹介でした。
それでは、最後までお読みいただきありがとうございました!
次回記事で、VBAで作成したメールの下書きの内容を、メール送信前にチェックする方法をご紹介しています。
連載目次:エクセルVBAでOutlookを操作してみよう!
エクセルVBAでOutlookのメール作成、送信などの操作をする方法をご紹介しています。メーラーとして便利なOutlookですが、VBAと組み合わせて更に便利に使ってしまいましょう。
- 【エクセルVBA】エクセルVBAでOutlookを操作しよう!参照設定とOutlookアプリケーションオブジェクトの取得
- 【エクセルVBA】Outlookでメールを作成・送信する方法
- 【エクセルVBA】エクセルシートに一覧化された複数の連絡先に本文を変えつつOutlookでメールを一括送信する方法
- エクセルVBAでOutlookメールの下書きを作成・表示して送信前に内容チェックする
- エクセルVBAでOutlookの連絡先を登録する方法
- 【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
- エクセルVBAでOutlookの受信メールフォルダとサブフォルダ名を書き出す方法
- エクセルVBAでOutlookの受信メールをワークシートに書き出す方法