【VBA】Excelからメールを自動作成する方法
VBAを使ってExcelからメールの作成をしたことがありますか?
Outlookのオブジェクトを使用すると結構簡単にメール作成ができます。
今回はメール作成のやり方と便利な使い道を紹介します。
使い道は意外と思いつかないと思うのですが、そのヒントとなる考え方を紹介します。
私は1つだけ相性の良い業務があったので、そのマクロを重宝しています。
この記事を参考に、自動化できる業務を探してみてはどうでしょう。
こんな人に向けた記事です。
- メールの自動送信をしたい
- 同じメールを繰り返し送信している
- Excelのデータを引用してメールを作りたい
やり方を知っている方は便利な使い方から読んでください。
VBAでメールを自動作成する方法
まずはライブラリにチェックを
プログラムの作成の前に、Outlookオブジェクトのライブラリにチェックを入れましょう。
上の図のようにツール⇒参照設定を押します。
ライブラリ一覧が表示されるので、その中から「Microsoft Outlook xx.x Object Library」にチェックを入れてOKを押します。(xx.xにはバージョンの値が入る)
これでライブラリの設定は完了です。
VBAプログラムの書き方
先にメールを自動作成するサンプルプログラムを紹介します。
Sub MakeEmail()
Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Dim shtMail As Worksheet: Set shtMail = ThisWorkbook.Sheets("メール内容")
'Outlookオブジェクト/MailItemオブジェクトの作成
Set objOutlook = New Outlook.Application
Set objMail = objOutlook.CreateItem(olMailItem)
With objMail
.To = shtMail.Cells(1, 1).Value 'メール宛先
.Subject = shtMail.Cells(2, 1).Value 'メール件名
.BodyFormat = olFormatPlain 'メールの形式
.Body = shtMail.Cells(3, 1).Value 'メール本文
.Display ' メール作成画面の表示
'.Send 'メール送信
End With
Set objOutlook = Nothing
End Sub
Outlookオブジェクト(objOutlook)とMailItem オブジェクト(objMail)という2つのオブジェクトを作成しています。
- Outlookオブジェクトは文字通りOutlookを操るために必要なオブジェクトです。
- MailItemオブジェクトはOutlookの中のメールを操作するのに必要なオブジェクトです。
今回はメールですが、操作したい内容に応じてCreateItemメソッドの引数を変更します。
作成するオブジェクト | 引数 | 操作したい内容 |
---|---|---|
MailItem | olMailItem | メール |
AppointmentItem | olAppointmentItem | 予定 |
ContactItem | olContactItem | 連絡先 |
TaskItem | olTaskItem | タスク |
また、With文の中でメールの内容を指示しています。
With objMail
.To = shtMail.Cells(1, 1).Value 'メール宛先
.Subject = shtMail.Cells(2, 1).Value 'メール件名
.BodyFormat = olFormatPlain 'メールの形式
.Body = shtMail.Cells(3, 1).Value 'メール本文
.Display ' メール作成画面の表示
'.Send 'メール送信
End With
各プロパティに値を設定することで宛先、件名、本文を自動入力することができます。
今回は「メール内容」シートの各セルの値を入力しました。
Sendメソッドはコメントアウトしていますが、このコメントを外せばそのまま送信することができます。
このマクロを実行すると画像のようにOutlookのメール送信画面が立ち上がります。
宛先、件名、メール本文にはそれぞれ「メール内容」シートの値が入ります。
このようにシート上の情報から自動的にメール文を作成することができます。
便利な使い方
メールの自動作成を活用するには、大きく次の4つがポイントになります。
- 文字列をつなげる
- 納期の自動計算
- 宛先が多数の場合
- 署名の使い分け
具体的には、次のようなニーズと相性が良いです。
- Excelシート上の文字列をつなぎ合わせて本文を作成したり、
- Date型を使って納期を自動計算したり、
- 毎回同じ人にメールを送信していたり、
- 社内、社外向けで署名を使い分けたりしたい。
私も利用例は少ないのですが、1件大きな効果を挙げたケースがありみあす。
シートの上の商品名などを使って依頼メールを作成するもので、年間120時間の業務削減に成功しました。
回答納期などもVBA内で自動計算できるため、手入力でミスすることもなくなりました。
Excel情報を転記してメール作成する業務があれば自動化できる可能性が高いため、いろいろと活用してみてください。