PR

VBAでメール作成して自動送信する方法 複数ファイル添付 Outlook版

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

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側の送信ボタンを右クリックしてマクロを登録します。

Excel側の送信ボタンを右クリックしてマクロを登録をクリックする

マクロ名SendMailOutlookを選択してOKボタンを押下する

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

Outlookを使ってメール送信するマクロを実行した結果

おおおー、メール作成されたー!!

ここまで確認出来たら「.Send」に変更して自動送信(送信トレイに配置)も試してみてください。

サンプルのダウンロード

今回作ったサンプルをダウンロードしたい方はどうぞ。

VBAでメール作成して自動送信する方法 複数ファイル添付 Outlook版

ダウンロードした後は、ファイルを右クリックしてプロパティを開き、下図の赤枠部分の「許可する」にチェックを入れて使えるようにしないとマクロが動作できないのでご注意を。

ダウンロードした後はファイルを右クリックしてプロパティを開いてセキュリティの許可するにチェックを入れる

悪意あるコードは書いてないですが、利用は自己責任でお願いします。当方では一切の責任を負いません。

まとめ

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

これで業務効率の向上も間違いなし!今回はOutlookを使ってメール送信する方法でしたが、Thunderbird(サンダーバード)を使ってメール送信したいというニーズも入ってきているんですよねー。

次回はThunderbird(サンダーバード)を使ってメール送信する方法を紹介したいと思います。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。