動画でExcel Excelシートからメール一括作成、VBAでOutlook操作
動画版「マクロ講座」です。
今回は Excel 上のデータにある名前やメールアドレス、また必要な情報、こういったデータを使いながら、それぞれの相手に合った内容に書き換えながらメールを送信するという内容のマクロを作ります。
Gmailを使っている場合でも、OutlookにGmailのアカウントを追加することもできるので、ExcelVBAからメールを自動送信できるのは魅力です。
やはりメールは本文の先頭に相手のお名前をきちんと書いておくべきですよね。 なんか一括で送られちゃった感が出ていると寂しくなります。
自分個人に送られたメールだということがきちんとわかるようにしたい事前に準備というのはそういうことです。 そして書くべき内容も、一人一人違ってくる場合、それに合わせて変更するべき箇所を決めておいて情報を入れ替えながら作成していきます。
そして最終的に下書きとして作成したメールを下書きとして保存するのもいいですし、 ディスプレイして、そして一個ずつ確認しながら送ってくというのでもいいですし、一気に送信してもいいわけです。 そのような状況に合わせて使いこなせるようなマクロを作成していきます。
1. OutlookをVBAで使う準備
2. Outlookオブジェクトの作成
3.Mailオブジェクトの作成
4.メール本文の作成
5.1件ずつメールを作成する。
このページからは、以下の内容を学ぶことができます。
サンプルで使うシートにはこのように送信先のリストが入力されています。

まず visual basic editor を開いて、標準モジュールを挿入した状態にします。
事前準備のために、ツールメニューからツールそして参照設定をクリックしてください。

参照可能なライブラリファイルが表示されます。
その中のmicrosoft outlook 16.0 Object library を探してチェックを入れます。
これで outlook をオブジェクトとして使うことができるようになります。

送信先として使うのは、2列目の氏名と4列目のアドレス、5列目は苗字だけ使おうと思って抜き出した列、6列目は日付、7列目は時刻となっています。 その隣の8列目は件名で、9列目が本文の内容となっています。

本文の文字の中で赤字で表示されている部分は次の回の動画で個人名とその個人に合った時刻等に変更する予定です。

操作の手順は以下のようになります。
1. Outlookを操作するためにオブジェクトを作成
2. メール操作用のオブジェクトを作成
3. メール操作用のオブジェクトに送信内容を追加
"Toメールアドレス"、 "CCメールアドレス" "BCCメールアドレス"、"件名"、 "本文"
4. メール送信処理を実行 (表示、保存、送信)
変数Worksheetには ThisWorkbook.Sheets("mail")をセットします。

Outlookを操作するためにOutlook 操作用のオブジェクトとして変数を宣言します。 変数名をOutAppUとしています。

Dim OutApp As Outlook.Application
Set OutApp = New Outlook.Application
OutAppに対してメール送信の設定をしていくことになります。
メール送信用のオブジェクトが必要になります。
メール送信用の変数名として
OutMailをつかいます。

Dim OutMail As Outlook.MailItem
Set OutMail = OutApp.CreateItem(olMailItem)
メール本文は関数を使って作成しています。
関数というのは、 CreateBodyOfMailという名前の自作の関数です。
CreateBodyOfMail は次回作成します。
引数として wsとrを指定します。これで本文の内容は決まりました。

Dim BodyOfMail As String
BodyOfMail = CreateBodyOfMail(ws, r)
次にメール送信用のオブジェクト OutMail に対して細かい設定をします。宛先とかです。

With OutMail
.To = ws.Cells(r, 4).Value 'Toメール宛先
.CC = ws.Cells(1,4).Value 'CCメール宛先
.Subject = ws.Cells(2, 9).Value 'メール件名
.body = BodyOfMail 'メール本文
End With
件名には送信先の氏名を入れるようにしましょう。

メールを送信する場合は、メール送信用オブジェクトに send メソッドを使います。
しかし、いきなりSendするより、Displayして確認した方が良いでしょう。
OutMail(メール送信用オブジェクト).Display
OutMail(メール送信用オブジェクト).Save
OutMail(メール送信用オブジェクト).Send

このように、Excelで自動メール送信をする場合は、ループ処理を使って、複数のメールを一括送信することができます。
今回のコードはメールを作成して、確認するまででした。
次回は本文を作成するFunctionをつくります。

Sub sendMail()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("mail")
Dim OutApp As Outlook.Application
Set OutApp = New Outlook.Application
Dim r As Long, lastrow As Long
lastrow = ws.Cells(2, 1).End(xlDown).Row
For r = 3 To lastrow
Dim OutMail As Outlook.MailItem
Set OutMail = OutApp.CreateItem(olMailItem)
Dim BodyOfMail As String
BodyOfMail = CreateBodyOfMail(ws, r)
With OutMail
.To = ws.Cells(r, 4).Value
.Subject = ws.Cells(r, 5).Value & "様 " & ws.Cells(2, 9).Value
.body = BodyOfMail
End With
OutMail.Display ' OutMail.Save OutMail.Send
Set OutMail = Nothing
Next r
End Sub