Outlook VBAで添付ファイルを付けてメールを作成/送信したいときはないでしょうか。
たとえば、日報など毎日同じ添付付きメールを作成する作業をVBAで効率化したい場合などです。
けど、そんな中で悩むことは、
・Outlook VBAで複数のファイルを一度にメールへ添付したいが方法がわからない。
ですよね。
今回はそんなお悩みを解決する
Outlook VBAで添付ファイルを付けてメールを作成/送信する方法について
まとめます!
もくじ
Outlook VBAで添付ファイルを付けてメールを作成/送信するイメージ
Outlook VBAで添付ファイルを付けてメールを作成/送信するイメージについて説明をします。
まず、Outlook VBA内にメールの件名や本文、宛先などを入力します。
.Body = "宛先各位" & vbCrLf _
& "本日の業務内容について以下の通り報告いたします。" & vbCrLf & vbCrLf _
& "9:00:朝礼" & vbCrLf _
& "10:00:商品納品" & vbCrLf _
& "13:00:定例会" & vbCrLf _
& "15:00:定期作業" & vbCrLf _
& "17:00:日報作成" & vbCrLf & vbCrLf _
& "以上/A部タカヒロ" & vbCrLf & vbCrLf
.To = "user1@extan.jp"
.CC = "user2@extan.jp"。
.Attachments.Add ("C:\Users\***\Documents\添付ファイル1.xlsx")
Outlook側へVBAを実装します。
添付付きメールを新規作成したいときにマクロを実行すると、
VBAに設定した内容に沿ってメールが作成されます!
VBAのコードを変えると、送信もできます!
さらに、Excel側にまとめた添付ファイルのパスなどのデータから複数の添付ファイルを付けてメールを作成/送信することもできます!!
日常繰り返しているメール作成作業が自動化できると便利ですね。
それでは早速やってみましょう!
Outlook添付ファイルを付けてメールを作成/送信するVBA
VBAの準備
Outlook添付ファイルを付けてメールを作成/送信するVBAの実装方法について説明をします。
今回のサンプルコードは以下の通りです。
Sub Outlookの添付ファイル付きメールを新規作成する()
'Outlook用の定義
Dim objMail As Object
If MsgBox("Outlookメールを作成しますか?", vbYesNo + vbQuestion, "確認") = vbYes Then
Set objMail = CreateItem(olMailItem)
With objMail
.BodyFormat = 3 ' 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.Subject = "業務日報(2021年12月10日)" '件名を指定します。
'本文を指定します。
.Body = "宛先各位" & vbCrLf _
& "本日の業務内容について以下の通り報告いたします。" & vbCrLf & vbCrLf _
& "9:00:朝礼" & vbCrLf _
& "10:00:商品納品" & vbCrLf _
& "13:00:定例会" & vbCrLf _
& "15:00:定期作業" & vbCrLf _
& "17:00:日報作成" & vbCrLf & vbCrLf _
& "以上/A部タカヒロ" & vbCrLf & vbCrLf
.To = "user1@extan.jp" 'Toを指定します。
.CC = "user2@extan.jp" 'CCを指定します。
'ファイルのパスを指定し、メールへ添付します。
.Attachments.Add ("C:\Users\***\添付ファイル1.xlsx")
.Display 'メールを表示します。
'.Send 'メールを送信します。
End With
Else
MsgBox "処理を中断します。"
End If
'オブジェクトを解放します。
Set objMail = Nothing
MsgBox "Outlookメールの作成が完了しました!", vbInformation
End Sub
VBAの設定
VBAの設定箇所は以下の通りです。
本文のフォーマットを指定します。
「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.BodyFormat = 3
件名を指定します。
.Subject = "業務日報(2021年12月10日)"
本文を指定します。改行は「vbCrLf」で指定して、文字列を&で結合するようにしてください。
.Body = "宛先各位" & vbCrLf _
& "本日の業務内容について以下の通り報告いたします。" & vbCrLf & vbCrLf _
& "9:00:朝礼" & vbCrLf _
& "10:00:商品納品" & vbCrLf _
& "13:00:定例会" & vbCrLf _
& "15:00:定期作業" & vbCrLf _
& "17:00:日報作成" & vbCrLf & vbCrLf _
& "以上/A部タカヒロ"
Toを指定します。
.To= "user1@extan.jp"
CCを指定します。
.CC = "user2@extan.jp"
ファイルのパスを指定します。
.Attachments.Add ("C:\Users\***\添付ファイル1.xlsx")
VBAの実装手順
実装手順は以下の通りです。
「開発」タブ>「Visual Basic」を押します。
「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] の ThisOutlookSessionをダブルクリックします。
右ペインのコードエリアへ、VBAコードを貼り付けて保存します。
こちらで完了です。
VBAの実行
では早速VBAの実行をしてみましょう。
まずはメールが作成されるか確認をします。
「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
「”Outlookメールの作成が完了しました!”」と表示されたら完了です。
作成されたメールを確認してみましょう。
はい、件名、宛先、本文に指定した値が挿入され、ファイルも添付されていますね!
つづいて送信をしてみましょう。
.Send
のコメントを外し、Sendメソッドを有効化します。
実行してみましょう。
はい、送信されていますね!
VBAの説明
新規にアイテムを作成し、オブジェクトにセットします。
Set objMail = CreateItem(olMailItem)
AttachmentsプロパティのAddメソッドで、メールへファイルを添付します。
.Attachments.Add ("C:\Users\***\添付ファイル1.xlsx")
お手数ですが、添付ファイルの位置調整は手動でお願いします。
メールを表示します。
.Display
メールを送信します。
'.Send
Excelのデータから添付ファイルを付けてメールを作成/送信するVBA
Excelのデータから添付ファイルを付けてメールを作成/送信するVBAについて説明をします。
メールを作成するデータを用意する
Excel側にOutlookのメールを作成するデータを用意しましょう。
サンプルのデータは以下のように1シート目へA列を件名、B列を本文、C列をTo、D列をCc、E列を添付ファイルのパスにしました。
添付ファイルが複数ある場合は「;」で区切ってください。
件名 | 本文 | To | Cc | 添付ファイルパス |
---|---|---|---|---|
業務日報(2021年12月10日) | 宛先各位
本日の業務内容について以下の通り報告いたします。 9:00:朝礼 以上/A部タカヒロ |
user1@extan.jp | user2@extan.jp | C:\Users\***\添付ファイル1.xlsx;C:\Users\***\添付ファイル2.xlsx |
VBAの処理の流れ
次にVBAの処理の流れについて説明をします。
処理の流れは以下の通りです。
①Outlook VBA→ このExcelブックのデータちょうだい→ Excel VBA
②Outlook VBA ←データ送るよ ←Excel VBA
③Outlook VBA →もらったデータでメール作成!
VBAの環境設定
Excelのデータから添付ファイルを付けてメールを作成/送信するVBAの実装方法について説明をします。
まずは、Excelのオブジェクトを使えるようにする設定を行います。
「開発」タブ>「Visual Basic」を押します。
「Visual Basic Editor」にて、[ツール] > [参照設定]をクリックし、
参照設定ウインドウが表示されたら、「Microsoft Excel **.* Object Library」をチェックし「OK」をクリックします。
VBAの準備
今回のサンプルコードは以下の通りです。
Sub Outlookの添付ファイル付きメールを新規作成する_Excelデータ取得()
'Outlook用の定義
Dim objMail As Object
'Excel用の定義
Dim appExl As Excel.Application
Dim wbBook As Workbook
Dim wsSheet As Worksheet
Dim lnContactCount As Long
Dim arrTemp As Variant
'Excelのブックとワークシートのオブジェクトを設定します。
Set appExl = CreateObject("Excel.Application")
'Excelウインドウを表示させます。非表示としたい場合はFalseを設定してください。
appExl.Visible = True
'指定したExcelブックを開き、オブジェクトに設定します。パスは環境にあわせて変更してください。
Set wbBook = appExl.Workbooks.Open("C:\Users\***\Documents\***.xlsx")
'Excelブック1シート目をオブジェクトに設定します。
Set wsSheet = wbBook.Worksheets(1)
'取得結果を記述する行番号を指定します。2行目のセルから開始されることになります。
lnContactCount = 2
If MsgBox("Outlookメールを作成しますか?", vbYesNo + vbQuestion, "確認") = vbYes Then
'一覧の件数分繰り返します。
For i = lnContactCount To wsSheet.Cells(1, 1).End(xlDown).Row
'メールを作成します。
Set objMail = CreateItem(olMailItem)
With objMail
.BodyFormat = 3 ' 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.Subject = wsSheet.Cells(i, 1) '件名を指定します。
.Body = wsSheet.Cells(i, 2) '本文を指定します。
.To = wsSheet.Cells(i, 3) 'Toを指定します。
.CC = wsSheet.Cells(i, 4) 'CCを指定します。
'添付ファイルのパスを";"区切りで分割し配列へ格納します。
arrTemp = Split(wsSheet.Cells(i, 5).Value, ";")
'添付ファイルのパスを指定し、メールへ添付します。
For j = 0 To UBound(arrTemp)
.Attachments.Add arrTemp(j)
Next
'宛先が空欄であるか判定します。
If wsSheet.Cells(i, 3) = "" Then
.Display 'メールを表示します。
Else
.Display 'メールを表示します。
'.Send 'メールを送信します。
End If
End With
Next
Else
MsgBox "処理を中断します"
End If
'Excelウインドウを閉じます。
appExl.Quit
'オブジェクトを解放します。
Set olItem = Nothing
Set wbBook = Nothing
Set wsSheet = Nothing
MsgBox "Outlookメールの作成が完了しました!", vbInformation
End Sub
VBAの設定
VBAの設定をおこないましょう。
前回のVBAにExcelブックを開いて値を取得するメソッドを追加していますので、
Excelブックのパスを設定する必要があります。
以下のパスを作成したExcelブックのものへ変更してください。
Set wbBook = appExl.Workbooks.Open("C:\Users\***\Documents\***.xlsx")
本文のフォーマットを指定します。
「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
.BodyFormat = 3
VBAの実行
VBAを実行してみましょう。
まずはメールが作成されるか確認をします。
「”Outlookメールの作成が完了しました!”」と表示されたら完了です。
作成されたメールを確認してみましょう。
はい、件名、宛先、本文に指定した値が挿入されていますね!
つづいて送信をしてみましょう。
.Send
のコメントを外し、Sendメソッドを有効化します。
実行してみましょう。
はい、送信されていますね!
VBAの説明
新規にアイテムを作成し、オブジェクトにセットします。
Set objMail = CreateItem(olMailItem)
Excelアプリケーションのオブジェクトを設定します。
Set appExl = CreateObject("Excel.Application")
Excelウインドウを表示させます。非表示としたい場合はFalseを設定してください。
appExl.Visible = True
指定したExcelブックを開き、オブジェクトに設定します。
Set wbBook = appExl.Workbooks.Open("C:\Users\***\Documents\***.xlsx")
Excelブック1シート目をオブジェクトに設定します。
Set wsSheet = wbBook.Worksheets(1)
取得結果を記述する行番号を指定します。2行目のセルから開始されることになります。
lnContactCount = 2
件名を指定します。
.Subject = wsSheet.Cells(i, 1)
本文を指定します。
.Body = wsSheet.Cells(i, 2)
Toを指定します。
.To = wsSheet.Cells(i, 3)
CCを指定します。
.CC = wsSheet.Cells(i, 4)
添付ファイルのパスを”;”区切りで分割し配列へ格納します。
arrTemp = Split(wsSheet.Cells(i, 5).Value, ";")
添付ファイルのパスを指定し、メールへ添付します。
For j = 0 To UBound(arrTemp)
.Attachments.Add arrTemp(j)
Next
メールを表示します。
.Display
メールを送信します。
'.Send
Excelのデータから添付ファイルを付けて複数のメールを作成/送信するVBA
次はExcelのデータから添付ファイルを付けて複数のメールを作成/送信するVBAについて説明をします。
複数メールを作成するデータを用意する
Excel側にOutlookのメールを作成するデータを用意しましょう。
以下のように1シート目へ1行増やして2行にしA列を件名、B列を本文、C列をTo、D列にCc、E列に添付ファイルのパスを入力します。
件名 | 本文 | To | Cc | 添付ファイルパス |
---|---|---|---|---|
業務日報(2021年12月10日) | 宛先各位
本日の業務内容について以下の通り報告いたします。 9:00:朝礼 以上/A部タカヒロ |
user1@extan.jp | user2@extan.jp | C:\Users\***\添付ファイル1.xlsx;C:\Users\***\添付ファイル2.xlsx |
業務日報(2021年12月13日) | 宛先各位
本日の業務内容について以下の通り報告いたします。 9:00:朝礼 以上/A部タカヒロ |
user1@extan.jp | user2@extan.jp | C:\Users\***\添付ファイル1.xlsx;C:\Users\***\添付ファイル2.xlsx |
VBAの実行
VBAを実行してみましょう。
「”Outlookメールの作成が完了しました!”」と表示されたら完了です。
作成されたメールを確認してみましょう。
複数のメールが作成されていますね!
Sendメソッドを有効化しメールを送信してみましょう。
はい、送信されていますね!
さいごに
いかがでしょうか。
今回は、
Outlook VBAで添付ファイルを付けてメールを作成/送信する方法とExcelデータからメールを作成する方法について
まとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す