メール
Outlook
HTMLメール
Outlook2013

Outlook2013で宛名を変えて一斉送信

More than 1 year has passed since last update.


概要

Outlook2013で宛名を変えて一斉送信する方法を覚書として残しておきます.「宛名を変えて一斉送信」とは,メールの先頭部分に書く送信先の名前を変えて別々のアドレスに送る方法です.宛名以外のメール内容は同じです.


実行環境と設定


  • Microsoft Excel 2013

  • Microsoft Outlook 2013

  • [開発]タブを両方とも出しておいてください.[ファイル]タブから[オプション],そして[リボンのユーザー設定]に進み,開発と書かれたチェックボックスをクリックしてレ点を入れます.(レ点が入っていれば[開発]タブからVisual Basicが使えます.)


共通のメール内容をOutlookテンプレートに書く


  • Outlook を開いて[新しい電子メール]からメールの共通部分を書きます.メールはHTML形式でつくります.

  • ここで宛名を「○○」とします.Excelのマクロを使ってこの○○を正しい名前にリプレースします.

table1

(言うまでもありませんが,GM社は架空の会社です.)


  • Outlookのテンプレートを,例えば"題名.oft"として保存します.絶対パスをマクロで指定するので,ここで確認します.今回はユーザ名を"Sheltie"とし,デスクトップにテンプレートをつくりました.

C:\Users\Sheltie\Desktop\題名.oft


Excelで宛名のリストのSheetをつくる


  • Excelを開いて次の図のように入力します.

table2


  • ファイル名は何でもいいですが,例えば"group.xlsx"として先ほどと同様,デスクトップに保存します.

  • [開発]から[Visual Basic]を開き,自動メール作成マクロを次のように書く


そのSheetにマクロを入れ込む


  • [開発]タブから[Visual Basic]を開き,宛名を書いたSheetに次のコードを書き込みます.絶対パスのユーザ名が"Sheltie"になっていることに注意してください.

Enum Column

Address = 1
Namae
End Enum

Sub MailGen()
Dim outl As New Outlook.Application
Dim m As mailItem

Dim MaxRow: MaxRow = Range("A1").End(xlDown).Row
For i = 2 To MaxRow
Set m = outl.CreateItemFromTemplate("C:\Users\Sheltie\Desktop\原稿.oft")
m.To = Cells(i, Column.Address).Value
m.HTMLBody = Replace(m.HTMLBody, "○○", Cells(i, Column.Namae).Value)
m.SaveAs "C:\Users\Sheltie\Desktop\" & Cells(i, Column.Namae).Value & ".msg"
Next i
End Sub


  • VBAの[実行]タブから[Sub/ユーザー フォームの実行]をクリックしてコンパイルします.

table3


  • おそらくコンパイルエラーになります.その原因は,"Outlook.Application" という型が定義されていないことにあります.

table4


  • それでは,[実行]タブから[リセット]をクリックして,[ツール]タブの[参照設定]をクリックします."Microsoft Outlook 15.0 Object Library"と書かれたチェックボックスをクリックしてレ点を入れます.これで型を定義することができます.

table5


  • 再び,[実行]タブから[Sub/ユーザー フォームの実行]をクリックしてコンパイルします.次は,下図のようにマクロの実行画面が出ると思います.(まだ何らかのコンパイルエラーが出る場合は,申し訳ありませんが自分で考えてください.)さらに,[実行]をクリックします.

table6


  • すると,次のようにデスクトップにメールが生成されます.

table7


  • 最後に,マクロ付きのExcelファイルを保存します.そのためには,拡張子を"xlsx"から"xltm"に変更する必要があります.[ファイル]タブから拡張子を変更した"group.xltm"を保存してください.(再利用するならば,カスタムテンプレート内に保存しておくことをお勧めします.)

C:\Users\Sheltie\Documents\Office のカスタム テンプレート\group.xltm


Outlookで一斉に送信する


  • Outlook を開き,送信トレイに自動生成したメールをドラック&ドロップします.

table8


  • ひとつずつダブルクリックして開いて送信してもいいのですが,宛先が多い場合マクロを組んで自動で送信してもらいます.したがって,マクロの実行によって送信トレイで選択されたメールを一斉送信することを考えます.

  • [開発]タブから[Visual Basic]を開き,宛名を書いたThisOutlookSessionに次のコードを書き込みます.

Public Sub SendSelected()

Dim objMail As MailItem
For Each objMail In ActiveExplorer.Selection
objMail.Send
Next
End Sub

table9


  • VBAの[実行]タブから[Sub/ユーザー フォームの実行]をクリックしてコンパイルします.次は,下図のようにマクロの実行画面が出ると思うので,[実行]をクリックします.

table10


  • 今回は,送信失敗です.なぜならば,"gm.com"なんてドメインは無いからです.

table10


引用と謝辞

ここまでは,http://www.bnm.tokyo/entry/2016/05/02/125815 さんの劣化版です.大変参考になりました.ありがとうございます。ただ,もっと単純にしたかったので引用して記事を作成しました.申し訳ありませんでした。本家ではAttachmentsメソッドを使って,添付ファイルまで宛先ごとに区別する方法を紹介しています.