ExcelVBAでのメールソフト(Outlook)の操作を、サンプルで紹介します。
VBAでのOutlook操作はあまり情報が出回っておらず、調べると意外と苦労すると感じたので、
入口となりそうなところを紹介します
▼目次
・準備~参照設定~
・1.受信フォルダを開く
・2.新規メールウィンドウを開く
・3.メール内容をマクロで入力
・まとめ
※最下部に完成ファイルを置いています。
■準備~参照設定~
準備としてOutlookオブジェクトを扱うための参照設定を行います。
VBEを開いて、メニューから「ツール」>「参照設定」を選択してください。
「Microsoft Outlook XX.X Object Library」にチェックを入れてOKを押してください。
※数字の所はバージョンですので、違っても問題ありません。

■1.受信フォルダを開く
まずは受信フォルダを開いてみましょう。
VBAを使ってOutlookオブジェクトを扱うことになりますが、全体像は以下となります。
▼オブジェクト構成図
Application ← Outlookアプリケーション
┗ nameSpace ← 各フォルダーへの入り口みたいなイメージ
┗ Folder ┳ 受信 (olFolderInbox) ←定数
┣ 送信済 (olFolderSentMail)
┣ 削除済 (olFolderDeletedItems)
┣ 下書き (olFolderDrafts)
┣ など
ザックリ、Application ⇒ nameSpace ⇒ Folder とオブジェクトを取得するイメージです。
実際に書いたプログラムが以下です。
' 上記構成図を見ながら、受信フォルダーをオープンしてみる。
Sub 受信フォルダ()
' 各種オブジェクト変数
Dim outlookApp As Outlook.Application ' Outlookオブジェクトを入れる
Dim myNameSpace As Outlook.nameSpace ' nameSpaceオブジェクトを入れる
Dim myFolder As Outlook.Folder ' フォルダを指定するのに使う
' outlookオブジェクトを作成してSetする呪文
Set outlookApp = CreateObject("Outlook.Application")
' nameSpaceオブジェクトを取得してSetする呪文
Set myNameSpace = outlookApp.GetNamespace("MAPI")
' フォルダーの指定(GetDefaultFolderの引数が、各フォルダに対応している)
Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
' フォルダを開く(ウィンドウが表示される)
myFolder.Display
' メモリ上に残ったオブジェクトを解放
Set outlookApp = Nothing
Set myNameSpace = Nothing
Set myFolder = Nothing
End Sub
どうしても呪文的な感じになってしまう箇所が多いです。
特に注目したいのは16行目で、GetDefaultFolderの引数にolFolerInboxを指定することで受信フォルダを開いています。
他のフォルダを開きたい場合にはここの値を変えてみて下さい。
▼よく使いそうな定数
| 定数 | 値 | 内容 |
| olFolderInbox | 6 | 受信トレイ |
| olFolderSentMail | 5 | 送信済みトレイ |
| olFolderDeletedItems | 3 | 削除済みトレイ |
| olFolderDrafts | 16 | 下書き |
| olFolderJunk | 23 | 迷惑メール |
■2.新規メールウィンドウを開く
次は新規メールウィンドウを開いてみます。
オブジェクト構成図は以下です。
▼オブジェクト構成図
Application ← Outlookアプリケーション
┣ MailItem ← メールオブジェクト
こちらはかなりシンプルですね。
早速作ったサンプルが以下になります。
' 新規メールウィンドウを表示するマクロ
Sub 新規メール()
Dim outlookApp As Outlook.Application ' Outlookオブジェクトを入れる
Dim mailItemObj As Outlook.MailItem ' MailItemオブジェクトを入れる
' outlookオブジェクトを作成してSetする呪文
Set outlookApp = CreateObject("Outlook.Application")
' MailItemオブジェクトを作成してSetする呪文
Set mailItemObj = outlookApp.CreateItem(olMailItem)
' 新規作成ウィンドウを開く(ウィンドウが表示される)
mailItemObj.Display
' メモリ上に残ったオブジェクトを解放
Set outlookApp = Nothing
Set mailItemObj = Nothing
End Sub
流れ的には、11行目で新規メールオブジェクト(空のMailItemオブジェクト)を作成して、
14行目でメール作成ウィンドウを開いています。
■3.メール内容をマクロで入力
最後に、新規メール作成時に送信先やタイトル等の情報をマクロで入力します。
自動送信の方法も併せて紹介します。
全体像は2と同じですが、MailItemの各プロパティを使います。
▼オブジェクト構成図
Application ← Outlookアプリケーション
┣ MailItem ← メールオブジェクト
┣ To
┣ CC
┣ BCC
┣ Subject
┣ body
┣ attachments
今回は、以下の様な入力フォームを作成し、入力されたデータを各プロパティに割り当てています。

作成したマクロは以下です。
' セルに入力した値から新規メールを作成するマクロ
Sub メール作成ツール()
'*** 変数宣言 **********************************
Dim outlookApp As Outlook.Application ' Outlookオブジェクトを入れる
Dim mailItemObj As Outlook.MailItem ' MailItemオブジェクトを入れる
Dim ws As Worksheet ' シート「メールツール」設定用
Dim toAdd As String ' Toアドレス
Dim ccAdd As String ' ccアドレス
Dim bccAdd As String ' Bccアドレス
Dim title As String ' タイトル
Dim body As String ' 本文
Dim attachments As String ' 添付ファイル
'*** 変数セット ********************************
Set ws = ThisWorkbook.Worksheets("メールツール") '「メールツール」シート
toAdd = ws.Range("C5").Value ' To
ccAdd = ws.Range("C6").Value ' cc
bccAdd = ws.Range("C7").Value ' bcc
title = ws.Range("C8").Value ' タイトル
body = ws.Range("C9").Value ' 本文
attachments = ws.Range("C10").Value ' 添付ファイル
'*** 処理開始 **********************************
' outlookオブジェクトを作成してSetする呪文
Set outlookApp = CreateObject("Outlook.Application")
' MailItemオブジェクトを作成してSetする呪文
Set mailItemObj = outlookApp.CreateItem(olMailItem)
' mailItemObj.SentOnBehalfOfName = "sak-teacher <aaaaa@bbb.com>" ' 差出人をセット
mailItemObj.To = toAdd ' toアドレスをセット
mailItemObj.CC = ccAdd ' ccアドレスをセット
mailItemObj.BCC = bccAdd ' bccアドレスをセット
mailItemObj.Subject = title ' 件名をセット
mailItemObj.body = body ' 本文をセット
' 添付ファイルをセット(空だとエラーになるのでif文)
If attachments <> "" Then
mailItemObj.attachments.Add attachments
End If
' 下書き保存
'mailItemObj.Save
' メール送信
' mailItemObj.Send
' 新規作成ウィンドウを開く(ウィンドウが表示される)
mailItemObj.Display
' メモリ上に残ったオブジェクトを解放
Set outlookApp = Nothing
Set mailItemObj = Nothing
End Sub
長くなりましたが、ベースは2と変わりません。
違うのは、「メールツール」シートに入力されているデータを取得し、
MailItemオブジェクトの「To」や「body」等のプロパティにデータを設定しています。
なお、コメントアウトしていますが34行目で差出人の設定ができます。
47行目や50行目を有効にすると、下書き保存や自動送信が可能になります。
逆に作成ウィンドウ表示が不要であれば、53行目はコメントアウトでかまいません。
■まとめ
以上、VBAでOutlookを操作してみました。
これだけで全てがカバーできるというものではないですが、
ベースのサンプルとしてコピペ等に活用してみて下さい!
今回作成したファイル
※作成したファイルはこちら ⇒ ダウンロード