Outlookで差し込み印刷のようにメール本文を作成するExcelVBA(メール作成③)

スポンサーリンク

追記:新しいバージョンの公開

この記事で紹介しているVBAコードは改良したものを公開しています。
よろしければこちらの記事をご覧ください。

Outlookメールの本文と宛先の一部を変更してたくさん送るツール

私は仕事柄メールをよく使う部署にいるのですが、宛先と内容を微妙に変えた内容のメールをたくさん送ることが多いです。

その際、内容と宛先の組み合わせを間違いやすく、不安で何度も確認しているのが非効率でした。
今回はそんな中で思いついた、宛名と宛先などの内容をWordの差し込み印刷のように一括入力できるツールを紹介します。

今回のVBAコードは参照設定「Microsoft Outlook ●● Object Library」を有効にしないとVBAがエラーになります。
設定方法はこちらのページを参考にしてください。
IEの操作について記入していますが、手順は同じです。

スポンサーリンク

Excelの表で変更点を一括管理

私が考えた案としては本文のテンプレートExcelのセル内に作成しておいて、そのうちの一部の文言を宛先ごとに差し替えるという内容です。
具体的には下記の画像のようにExcelのシートを作成しました。

95-1

件名・本文を1,2行目に作成し、その下に宛先と変更点の一覧表を作成しています。
本文中の「<」と「>」で囲まれた文字を一覧表の内容に置き換える想定でシートを作成しました。

添付ファイルが必要な場合はデスクトップに添付ファイルを用意した上で、「添付ファイル名〇〇(番号)」という項目を一覧表に用意します。今回は2つのファイルを添付する想定で表を作っています。

各項目と添付ファイルの位置は数が増えるにつき、横にずらしても問題ありませんが添付ファイルの列は項目から連続して右端に並べるようにして記入しておきます。

Outlookで差し込み印刷のような本文を作成するExcelVBAコード

上記の表を元にOutlookのメールを作成するExcelVBAコードは以下のようになります。

Sub 一括で送信用メール作成()

Dim oApp As New Outlook.Application
Dim oItem As Outlook.MailItem

Dim WSH As Object
Set WSH = CreateObject(“Wscript.Shell”)
Dim DesktopPath As String
DesktopPath = WSH.SpecialFolders(“Desktop”)

Dim 本文
Dim i As Long, k As Long, t As Long

i = 6
Do Until Cells(i, 1) = “”

本文 = Cells(3, 2).Text
k = 4
Do Until Left(Cells(5, k), 6) = “添付ファイル” Or Cells(5, k) = “”
’項目がなくなるところまで置き換えを繰り返す
本文 = Replace(本文, “<” & Cells(5, k) & “>”, Cells(i, k))
k = k + 1
Loop
本文 = Replace(本文, vbLf, “<br />”) ’改行をHTMLに合わせる

Set oItem = oApp.CreateItem(olMailItem)
oItem.To = Cells(i, 1)
oItem.Subject = Cells(2, 2)

oItem.HTMLBody = “” & 本文 & “

oItem.CC = Cells(i, 2)
oItem.BCC = Cells(i, 3)

t = k
Do Until Cells(5, t) = “”
oItem.Attachments.Add DesktopPath & “” & Cells(i, t)
t = t + 1
Loop

’oItem.Send ’送る場合
oItem.Display ’送信せずに画面を表示する場合

i = i + 1
Loop

End Sub

文字の大きさなどを修正するため、HTML形式で作成しています。

HTMLではExcelで使用されているvbLfの改行のコードが反映されませんので改行コードをHTML用として<br />に変更しています。

コメント