Outlook VBAでメールを作成/送信したいときはないでしょうか。
たとえば、日報など毎日同じメールを作成する作業をVBAで効率化したい場合などです。
けど、そんな中で悩むことは、
・Excelにまとめたデータからメールを作成したいが方法がわからない。
ですよね。
今回はそんなお悩みを解決する
Outlook VBAでメールを作成/送信する方法とExcelデータからメールを作成する方法について
まとめます!
もくじ
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部タカヒロ"
Outlook側へVBAを実装します。
メールを新規作成したいときにマクロを実行すると、
VBAに設定した内容に沿ってメールが作成されます!
VBAのコードを変えると、送信もできます!
さらに、Excel側にまとめたデータからOutlookメールを作成/送信することもできます!!
日常繰り返しているメール作成作業が自動化できると便利ですね。
それでは早速やってみましょう!
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部タカヒロ"
.To = "user1@extan.jp" 'Toを指定します。
.CC = "user2@extan.jp" 'CCを指定します。
.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"
VBAの実装手順
実装手順は以下の通りです。
Outlookの「開発」タブ>「Visual Basic」を押します。
「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] の ThisOutlookSessionをダブルクリックします。
右ペインのコードエリアへ、VBAコードを貼り付けて保存します。
こちらで完了です。
VBAの実行
では早速VBAの実行をしてみましょう。
まずはメールが作成されるか確認をします。
「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
「”Outlookメールの作成が完了しました!”」と表示されたら完了です。
作成されたメールを確認してみましょう。
はい、件名、宛先、本文に指定した値が挿入されていますね!
つづいて送信をしてみましょう。
.Send
のコメントを外し、Sendメソッドを有効化します。
実行してみましょう。
はい、送信されていますね!
VBAの説明
新規にアイテムを作成し、オブジェクトにセットします。
Set objMail = CreateItem(olMailItem)
メールを表示します。
.Display
メールを送信します。
'.Send
Excelのデータからメールを作成/送信するVBA
Excelのデータからメールを作成/送信するVBAについて説明をします。
メールを作成するデータを用意する
Excel側にOutlookのメールを作成するデータを用意しましょう。
サンプルのデータは以下のように1シート目へA列を件名、B列を本文、C列をTo、D列をCcにしました。
件名 | 本文 | To | Cc |
---|---|---|---|
業務日報(2021年12月10日) | 宛先各位
本日の業務内容について以下の通り報告いたします。 9:00:朝礼 以上/A部タカヒロ |
user1@extan.jp | user2@extan.jp |
VBAの処理の流れ
次にVBAの処理の流れについて説明をします。
処理の流れは以下の通りです。
①Outlook VBA→ このExcelブックのデータちょうだい→ Excel VBA
②Outlook VBA ←データ送るよ ←Excel VBA
③Outlook VBA →もらったデータでメール作成!
VBAの環境設定
Excelのデータからメールを作成/送信するVBAの実装方法について説明をします。
まずは、Excelのオブジェクトを使えるようにする設定を行います。
Outlookの「開発」タブ>「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 i As Long
'Excelアプリケーションのオブジェクトを設定します。
Set appExl = CreateObject("Excel.Application")
'Excelウインドウを表示させます。非表示としたい場合はFalseを設定してください。
appExl.Visible = True
'指定したExcelブックを開き、オブジェクトに設定します。パスは環境にあわせて変更してください。
Set wbBook = appExl.Workbooks.Open("C:\Users\takah\OneDrive\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を指定します。
'宛先が空欄であるか判定します。
If wsSheet.Cells(i, 3) = "" Then
.Display 'メールを表示します。
Else
.Display 'メールを表示します。
'.Send 'メールを送信します。
End If
End With
Next
Else
MsgBox "処理を中断します"
End If
'オブジェクトを解放します。
appExl.Quit
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
メールを表示します。
.Display
メールを送信します。
'.Send
Excelのデータから複数メールを作成/送信するVBA
次はExcelのデータから複数のメールを作成/送信するVBAについて説明をします。
複数メールを作成するデータを用意する
Excel側にOutlookのメールを作成するデータを用意しましょう。
以下のように1シート目へ1行増やして2行にしA列を件名、B列を本文、C列をTo、D列をCcに値を入力します。
件名 | 本文 | To | Cc |
---|---|---|---|
業務日報(2021年12月10日) | 宛先各位
本日の業務内容について以下の通り報告いたします。 9:00:朝礼 以上/A部タカヒロ |
user1@extan.jp | user2@extan.jp |
業務日報(2021年12月13日) | 宛先各位
本日の業務内容について以下の通り報告いたします。 9:00:朝礼 以上/A部タカヒロ |
user1@extan.jp | user2@extan.jp |
VBAの実行
VBAを実行してみましょう。
「”Outlookメールの作成が完了しました!”」と表示されたら完了です。
作成されたメールを確認してみましょう。
複数のメールが作成されていますね!
Sendメソッドを有効化しメールを送信してみましょう。
はい、送信されていますね!
さいごに
いかがでしょうか。
今回は、
Outlook VBAでメールを作成/送信する方法とExcelデータからメールを作成する方法について
まとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
初めまして。outlookでVBAを勉強しようと検索していたらわかりやすく解説してあるこの記事に辿り着き、早速実践させていただいております。一つご教授いただきたいのですが、メールの作成まではできるのですが、Sendメソッドを有効化しても作成した状態から送信まで行きません。どのような要因が考えられるでしょうか?
いつもご利用ありがとうございます。
Sendメソッドを有効化してもメールが送信されない件ですが、
こちら、申し訳ありません。コードにミスがございました。
宛先存在チェックで指定している列番号がエクセルに定義がない7列目を指定しておりました。
「If wsSheet.Cells(i, 7) = “” Then」
正しくは宛先が入力されている3列目ですので、7を3に変更いただきたくお願いいたします。
※公開コードも修正させていただきました。
また、メールを送信する機能を有効にする場合は以下のようにお願いいたします。
■修正後
If wsSheet.Cells(i, 3) = “” Then
.Display ‘メールを表示します。
Else
.Send ‘メールを送信します。
End If
Dim appExl As Excel.Applicationのコンパイルエラーについて、解消できました。
マクロが走った時、感動しました。
今回、[参照設定]を理解するのに手間取りましたが、その重要性を学びました。
懇切丁寧に対応頂き、ありがとうございました。タカヒロ@extan様のファンになりました、今後も有益な情報を期待しております、ありがとうございました。
yoshiです。ご連絡頂き、誠にありがとうございます。
ご指摘通り、先ず実装先がExcel側のVBEでしたので、改めて、OutlookのVBEで実装しました。また、Excelの参照設定も対応しました。
そうすると、 次に、 [Dim appExl As Excel.Application]の箇所で、留まってしまいます。
–VBAの準備より引用———————————————————————
Sub Outlookのメールを新規作成する_Excelデータ取得()
‘Outlook用の定義
Dim objMail As Object
‘Excel用の定義
Dim appExl As Excel.Application←ここで青色でハイライトされて、
「コンパイルエラー:ユーザー定義型は提議されてません。」と出ます。
上記について、何度も申し訳ございませんが、ご教示頂けないでしょうか。
何とか活用させて頂きたいので、宜しくお願いします。
Dim appExl As Excel.ApplicationのコンパイルエラーですとExcelアプリケーション呼び出しができない状態ですので、
Outlook VBE側でMicrosoft Excel **.* Object Libraryが参照設定されているかご確認いただけますでしょうか。
いつもブログ拝見させて頂いております。
1点ご教ください。
「 ‘メールを作成します。
Set objMail = CreateItem(olMailItem)」についてですが、デバッグで進めると、「コンパイルエラー:Sub またはFunction が定義されてません」
となり、うまくいきませ。具体的にはどの箇所を修正して、進めたらよろしいでしょうか。
いつもご利用ありがとうございます。
コンパイルエラーが発生する件ですが、参照設定がされていないために必要なプロシージャが呼べていない可能性があります。
まずは実装先についてOutlookのVBEになっているかご確認願います。(Excel側のVBEではありません。)
また、公開コードではExcelの参照設定を必要としているものもありますので、以下を参照しご確認いただけますでしょうか。
https://extan.jp/?p=5021#VBA%E3%81%AE%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A
いつもブログ拝見させて頂いております。
1点コメントさせてください。
文中において
「.Send
のコメントを外し、Sendメソッドを有効化します。」
と出てくるのですがこの部分が上手く動作させることができないのですが具体的にはどのように手順進めたらよろしいでしょうか。
メール自体は作成され、「”Outlookメールの作成が完了しました!”」と表示されるのですが送信まで進まない状態になります。
いつもご利用ありがとうございます。
Sendメソッドを有効化する方法につきまして、
以下コードの”’”を外していただければと存じます。
■変更前
‘.Send
■変更後
.Send
よろしくお願いいたします。