VBAでOutlookメールを自動作成するメリット
メリットは以下の2つです。
- 時短になる
- 誤送信を減らせる
メリット1: 時短になる
たとえば同じ文面のメールを、複数の取引先に送る場合、VBAでメールを自動生成したほうが時短になります。
メリット2: 誤送信を減らせる
VBAでメール作成すると件名や本文はもちろん、宛先やCcも自動で設定されるので誤送信が減ります。
昨今、メール誤送信による事件が後をたちません。
もし毎日決まりきった内容のメールを送っているなら自動化したほうが誤送信のリスクを減らせます。
事前準備:VBAでメール作成するまえに行う参照設定
実際にメールを自動で作る前に参照設定をしましょう。
Excelを開いたら、Alt+F11でVBEを開いてください。
メニューバーの中にある「ツール」→「参照設定」の順にクリックします。

表示された[参照設定 – VBAProject]の[参照可能なライブラリ ファイル]の一覧より、[Microsoft Outlook 1x.0 Object Library]のチェック ボックスをオンにします。

以上で事前準備は完了です。
上記の設定にしておかないと、以下のような「ユーザー定義型は定義されていません。」というエラーが表示されるからです。

注意点:Application.CreateItem(0)はエラーになる
Application.CreateItem(0)
を使う、と記載された記事もありますが、私はエラーになりました。
具体的には以下のコードは、エラーになりましたね。
Sub test()
' Outlookのメールアイテムオブジェクトを作成
Dim Mail As Object
Set Mail = Application.CreateItem(0) ' この文がエラーになる
' 以下、省略
End Sub
なので、Application.CreateItem(0)
は使わずに、以下で紹介するサンプルコードをご覧ください。
メール用のObject型変数を作り、各要素を設定する
以下のように、まずメール用のObject型変数を作ります。
Sub CreateEmail()
' Outlookのメールアイテムオブジェクトを作成
Dim Mail As Object
Set Mail = Outlook.CreateItem(olMailItem)
' 以下、略
End Sub
Object型というのは、変数のデータ型の一種です。詳しくは以下をご覧ください。

次に、メール用のObject型変数に、「変数. xxx = yyy」 みたいに、値を設定していくわけです。
Sub CreateEmail()
' Outlookのメールアイテムオブジェクトを作成
Dim Mail As Object
Set Mail = Outlook.CreateItem(olMailItem)
' メールの宛先(To)を設定
Mail.To = "recipient@example.com"
' メールの件名を設定
Mail.Subject = "新しいメールの件名"
' 以下、略
End Sub
「変数. xxx = yyy」のxxx の部分は以下のとおり。
コード | 意味 |
---|---|
.To | 宛先 |
.Subject | 件名 |
.CC | Cc |
.BCC | Bcc |
.Body | 本文 |
.HTMLBody | HTML形式の本文 |
サンプルコード
Outlookでメールを作成するためのVBAサンプルコードを以下に示します。
サンプルコード 1: 新しいメールを作成し、宛先と件名を設定
Sub CreateEmail()
' Outlookのメールアイテムオブジェクトを作成
Dim Mail As Object
Set Mail = Outlook.CreateItem(olMailItem)
' メールの宛先(To)を設定
Mail.To = "recipient@example.com"
' メールの件名を設定
Mail.Subject = "新しいメールの件名"
' メールを表示(まだ送信はしない)
Mail.Display
End Sub
メールの宛先を複数設定する
メールの宛先を複数指定したい場合は、アドレスとアドレスを;
で区切るだけです。
Mail.To = "recipient@example.com"; "recipient2@example.com"
サンプルコード 2: メールに本文を追加
Sub AddBodyToEmail()
Dim Mail As Object
Set Mail = Outlook.CreateItem(olMailItem)
Mail.To = "recipient@example.com"
Mail.Subject = "本文を追加したメール"
' メールの本文を設定
Mail.Body = "これはテストメールの本文です。"
Mail.Display
End Sub
サンプルコード 3: メールにCCとBCCを追加
Sub AddCCandBCCToEmail()
Dim Mail As Object
Set Mail = Outlook.CreateItem(olMailItem)
Mail.To = "recipient@example.com"
Mail.CC = "cc@example.com"
Mail.BCC = "bcc@example.com"
Mail.Subject = "CCとBCCを設定したメール"
Mail.Body = "このメールにはCCとBCCが設定されています。"
Mail.Display
End Sub
サンプルコード 4: With, End Withを使う
Sub AddCCandBCCToEmail()
Dim Mail As Object
Set Mail = Outlook.CreateItem(olMailItem)
With Mail
.To = "recipient@example.com"
.CC = "cc@example.com"
.BCC = "bcc@example.com"
.Subject = "CCとBCCを設定したメール"
.Body = "このメールにはCCとBCCが設定されています。"
.Display
End With
End Sub
上記は、サンプルコード3をWith
と End With
を用いて書き直したバージョンです。
Mail
オブジェクトに対する設定を With
ブロック内で行うこと、Mail.
を何度も繰り返し書く必要がなくなり、コードがすっきりとします。
サンプルコード 5: HTML形式のメール本文を設定
Sub CreateHTMLEmail()
Dim Mail As Object
Set Mail = Outlook.CreateItem(olMailItem)
Mail.To = "recipient@example.com"
Mail.Subject = "HTMLメール"
' HTML形式でメール本文を設定
Mail.HTMLBody = "<html><body><h1>これはHTML形式のメールです</h1><p>HTMLタグを使ってフォーマットできます。</p></body></html>"
Mail.Display
End Sub
サンプルコード 6: メールを自動で送信
Sub SendEmailAutomatically()
Dim Mail As Object
Set Mail = Outlook.CreateItem(olMailItem)
Mail.To = "recipient@example.com"
Mail.Subject = "自動送信メール"
Mail.Body = "このメールは自動的に送信されます。"
' メールを送信
Mail.Send
End Sub
上記のように、新規メール画面を開かず送信したい場合は、Display
メソッドを書かずに、Send
メソッドを書きます。
サンプルコード 6: ファイルを添付する
Sub SendEmailAutomatically()
On Error Goto ErrHandler
Dim Mail As Object
Set Mail = Outlook.CreateItem(olMailItem)
Mail.To = "recipient@example.com"
Mail.Subject = "自動送信メール"
Mail.Body = "このメールは自動的に送信されます。"
Mail.Attachments.Add "C:\Sample\test.zip" 'ファイル添付
Mail.Display
ErrHandler:
Msgbox Err.Message
End Sub
ファイルを添付する場合は、上記のように AttachmentsプロパティのAddメソッド
を使います。
Addメソッドの引数には、ファイル名をフルパスで指定します。
エラー処理の詳細は、以下をご覧ください。

サンプルコード 7: Excelに入力した値を使う
Excelに入力した値を使う方法を紹介します。
たとえば以下のように、Excelにメールの宛先や本文などを入力しておきます。

上記のボタンを押すと、以下の関数を実行するとします。
Sub AddCCandBCCToEmail()
Dim Mail As Object
Set Mail = Outlook.CreateItem(olMailItem)
With Mail
.To = Range("C3").Value
.CC = Range("C4").Value
.BCC = Range("C5").Value
.Subject = Range("C6").Value
.Body = Range("C7").Value
.Display
End With
End Sub
これらのコードサンプルはOutlookのVBAを使用してメールの作成、編集、送信を行う基本的な方法を示しています。これを参考にして、さらに複雑な機能を実装してみてください。