VBAでメール作成して自動送信する方法 複数ファイル添付 Outlook版
Excel VBAでOutlookを使ってメール作成し、複数のファイル添付して自動送信する方法です。

Excel VBAでメール送信するには、Outlookオブジェクトを操作することで実現できます。
VBAで自動化するといっても、手動でやることと同じ手順をコードに書くだけ。Outlookを起動して、メール新規作成。宛先・件名・本文を記入して送信ってね。
定型的な業務連絡やリマインドメールなんかは、この方法で自動化すれば効率がグッと上がりますよ。
ここでは Excel VBAでOutlookメールを作成し、複数のファイル添付して自動送信する方法 を紹介します。
目次
事前準備
事前準備は特にないです。Excelのリボンで「開発」タブを開いておくくらいですかね。
「参照設定」から「Microsoft Outlook XX.X Object Library」にチェックを入れよって記事を見かけるけど、ここで紹介する方法では参照設定は不要です。筆者は参照設定とかしていたことを絶対忘れるタイプの人間なんでね。忘れん坊なのよ。だから参照設定しない方法を使います。
メール文書を用意する
書式はなんでもいいですが、メール文書を用意する必要があります。宛先・件名・本文などですね。コードに直接書くと汎用性がないので、Excelに書いておくといいですよ。
ここでは下図のような書式を用意しました。

差出人はなくてもOKです。空白の場合、Outlookの既定アカウントが自動設定されます。既定アカウント以外を使う場合に指定してください。Outlookに設定のないアカウントの場合はエラーになるのでご注意を。
宛先・件名・本文は必須ですね。なくても今回のコードは動きますが、意味ないですからね。
そして添付ファイルがあればファイルパスを設定します。今回は3つまでファイル添付できる仕様にしました。
Outlookを使ってメール送信するコード
メール文書を読み取って「Outlookを使ってメール送信する」コードを掲載します。
標準モジュールを追加して貼り付けてください。
'
' 処理 :Outlookを使ってメール送信する
'
Public Sub SendMailOutlook()
On Error GoTo SendMailOutlookError
' メール文書のセルから値を取得
Dim Sheet As Worksheet: Set Sheet = Worksheets("Sheet1")
Dim FromAddr As String: FromAddr = Sheet.Cells(1, "B").Value ' 差出人
Dim ToAddr As String: ToAddr = Sheet.Cells(2, "B").Value ' 宛先
Dim CcAddr As String: CcAddr = Sheet.Cells(3, "B").Value ' CC
Dim Subject As String: Subject = Sheet.Cells(4, "B").Value ' 件名
Dim Body As String: Body = Sheet.Cells(5, "B").Value ' 本文
Dim Attachments() As String ' 添付ファイル
Dim i As Long
For i = 0 To 2
If Sheet.Cells(i + 6, "B").Value <> "" Then
ReDim Preserve Attachments(i)
Attachments(i) = Sheet.Cells(i + 6, "B").Value
End If
Next i
' Outlookオブジェクトを作成
Dim App As Object
Dim Mail As Object
' Outlookを起動(既に起動している場合はそのインスタンスを使用)
Set App = CreateObject("Outlook.Application")
' 新規メールの作成
Set Mail = App.CreateItem(0)
' 差出人の設定
If FromAddr <> "" Then
Set Mail.SendUsingAccount = App.Session.Accounts.Item(FromAddr)
End If
' メールのプロパティを設定
'Mail.SentOnBehalfOfName = "" ' 送信者の表示名
Mail.To = ToAddr ' 宛先
Mail.CC = CcAddr ' CC
'Mail.BCC = "" ' BCC
Mail.Subject = Subject ' 件名
Mail.Body = Body ' 本文
Mail.BodyFormat = 2 ' 1:テキスト形式, 2:HTML形式, 3:リッチテキスト形式
If (Not Not Attachments) Then
For i = 0 To UBound(Attachments)
Mail.Attachments.Add Attachments(i) ' 添付ファイル
Next i
End If
Mail.Display ' メール表示(手動送信)
'Mail.Send ' メール送信(自動送信)
' オブジェクトの解放
Set App = Nothing
Set Mail = Nothing
Exit Sub
SendMailOutlookError:
MsgBox Err.Description, vbCritical, "Outlookメール送信"
End Sub
ソースコードの説明
続いてコードの説明をしていきます。
メール文書のセルから値を取得
前半部分は、メール文書を設定したセルから値を取得するコードになります。
' メール文書のセルから値を取得
Dim Sheet As Worksheet: Set Sheet = Worksheets("Sheet1")
Dim FromAddr As String: FromAddr = Sheet.Cells(1, "B").Value ' 差出人
Dim ToAddr As String: ToAddr = Sheet.Cells(2, "B").Value ' 宛先
Dim CcAddr As String: CcAddr = Sheet.Cells(3, "B").Value ' CC
Dim Subject As String: Subject = Sheet.Cells(4, "B").Value ' 件名
Dim Body As String: Body = Sheet.Cells(5, "B").Value ' 本文
Dim Attachments() As String ' 添付ファイル
Dim i As Long
For i = 0 To 2
If Sheet.Cells(i + 6, "B").Value <> "" Then
ReDim Preserve Attachments(i)
Attachments(i) = Sheet.Cells(i + 6, "B").Value
End If
Next i
VBAの基礎知識はある方が読んでいると思うので、この辺りの説明は割愛します。
Outlookオブジェクトを作成してOutlookを起動する
Outlookオブジェクトを作成してOutlookを起動します。既に起動している場合はそのインスタンスを使用します。 「CreateObject("Outlook.Application")」と記述することで参照設定は不要となります。
Set App = CreateObject("Outlook.Application")
メールを新規作成し内容を記載する。
「App.CreateItem(0)」で新規メール作成をし、宛先・件名・本文などの設定をおこないます。ここでは「.BodyFormat=2」とし、HTML形式を指定しています。テキスト形式(=1)やリッチテキスト形式(=3)の指定も可能です。
「.Display」で作ったメールを表示するようにしていますが、業務で使う場合は「.Send」にすると自動送信(送信トレイに配置)します。
' 新規メールの作成
Set Mail = App.CreateItem(0)
' 差出人の設定
If FromAddr <> "" Then
Set Mail.SendUsingAccount = App.Session.Accounts.Item(FromAddr)
End If
' メールのプロパティを設定
'Mail.SentOnBehalfOfName = "" ' 送信者の表示名
Mail.To = ToAddr ' 宛先
Mail.CC = CcAddr ' CC
'Mail.BCC = "" ' BCC
Mail.Subject = Subject ' 件名
Mail.Body = Body ' 本文
Mail.BodyFormat = 2 ' 1:テキスト形式, 2:HTML形式, 3:リッチテキスト形式
If (Not Not Attachments) Then
For i = 0 To UBound(Attachments)
Mail.Attachments.Add Attachments(i) ' 添付ファイル
Next i
End If
Mail.Display ' メール表示(手動送信)
'Mail.Send ' メール送信(自動送信)
コメントにしていますが「.SentOnBehalfOfName」を指定すると、送信者の表示名を変更できます。
送信前には差出人の名前が変更になります。

受信したメールもこのような表示になります。
![]()
「.SentOnBehalfOfName」を設定しなければアカウント設定の表示名が使われるので、基本的には変更不要なのですが、業務によって使い分ける場合とかに指定することもあるかもなので、念のため書いておきます。
Outlookオブジェクトの解放
基本的には不要だけれども、お作法というか・・・ね。
' オブジェクトの解放
Set App = Nothing
Set Mail = Nothing
Outlookを使ってメール送信するマクロの登録
Excel側の送信ボタンを右クリックしてマクロを登録します。


送信ボタンを押下してみよう。すると・・・・。

おおおー、メール作成されたー!!
ここまで確認出来たら「.Send」に変更して自動送信(送信トレイに配置)も試してみてください。
サンプルのダウンロード
今回作ったサンプルをダウンロードしたい方はどうぞ。
VBAでメール作成して自動送信する方法 複数ファイル添付 Outlook版
ダウンロードした後は、ファイルを右クリックしてプロパティを開き、下図の赤枠部分の「許可する」にチェックを入れて使えるようにしないとマクロが動作できないのでご注意を。

悪意あるコードは書いてないですが、利用は自己責任でお願いします。当方では一切の責任を負いません。
まとめ
Excel VBAでOutlookを使ってメール作成し、複数のファイル添付して自動送信する方法を紹介しました。
これで業務効率の向上も間違いなし!今回はOutlookを使ってメール送信する方法でしたが、Thunderbird(サンダーバード)を使ってメール送信したいというニーズも入ってきているんですよねー。
次回はThunderbird(サンダーバード)を使ってメール送信する方法を紹介したいと思います。
おつかれさまでした。