Tips

【ExcelVBA Tips】Outlookメールを操作する

【ExcelVBA Tips】Outlookメールを操作する

ExcelVBAでのメールソフト(Outlook)の操作を、サンプルで紹介します。
VBAでのOutlook操作はあまり情報が出回っておらず、調べると意外と苦労すると感じたので、
入口となりそうなところを紹介します

最下部に完成ファイルを置いています。

■準備~参照設定~

準備として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を操作してみました。
これだけで全てがカバーできるというものではないですが、
ベースのサンプルとしてコピペ等に活用してみて下さい!

今回作成したファイル
※作成したファイルはこちら ⇒ ダウンロード

■ExcelVBA関連記事

excel_VBAを学んで業務効率化!

excel-vba入門 連載

Recent News

Recent Tips

Tag Search