【Outlook VBA】メールを作成/送信する方法!Excelデータから作成も!

Outlook VBAでメールを作成/送信したいときはないでしょうか。

たとえば、日報など毎日同じメールを作成する作業をVBAで効率化したい場合などです。

けど、そんな中で悩むことは、

・VBAでOutlookメールを作成したいが方法がわからない。
・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の実装手順

実装手順は以下の通りです。

「開発」タブ>「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:朝礼
10:00:商品納品
13:00:定例会
15:00:定期作業
17:00:日報作成

以上/A部タカヒロ

user1@extan.jp user2@extan.jp

VBAの処理の流れ

次にVBAの処理の流れについて説明をします。

処理の流れは以下の通りです。

 

①Outlook VBA→ このExcelブックのデータちょうだい→ Excel VBA

②Outlook VBA ←データ送るよ ←Excel VBA

③Outlook VBA →もらったデータでメール作成!

 

タカヒロ
タカヒロ
実行するVBAはExcel、Outlookの2種類で、Excelのメールデータを取り出しOutlookのメールを作成した上、送信するという処理の流れとなります。

VBAの環境設定

Excelのデータからメールを作成/送信するVBAの実装方法について説明をします。

まずは、Excelのオブジェクトを使えるようにする設定を行います。

「開発」タブ>「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

    
    '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

    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, 7) = "" Then
                    .Display  'メールを表示します。
                Else
                    .Display 'メールを表示します。
                    '.Send  'メールを送信します。
                End If

           End With
    Next
    
    Else
        MsgBox "処理を中断します"
    End If
    
    'オブジェクトを解放します。
    appExl.Quit
    
    Set olItem = Nothing
    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:朝礼
10:00:商品納品
13:00:定例会
15:00:定期作業
17:00:日報作成

以上/A部タカヒロ

user1@extan.jp user2@extan.jp
業務日報(2021年12月13日) 宛先各位

本日の業務内容について以下の通り報告いたします。

9:00:朝礼
10:00:商品納品
13:00:定例会
15:00:定期作業
17:00:日報作成

以上/A部タカヒロ

user1@extan.jp user2@extan.jp

VBAの実行

VBAを実行してみましょう。

「”Outlookメールの作成が完了しました!”」と表示されたら完了です。

作成されたメールを確認してみましょう。

複数のメールが作成されていますね!

Sendメソッドを有効化しメールを送信してみましょう。

はい、送信されていますね!

さいごに

いかがでしょうか。

今回は、
Outlook VBAでメールを作成/送信する方法とExcelデータからメールを作成する方法について
まとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



タカヒロ

タカヒロ
実質無料で読めるExcelVBA本についてまとめました。
もしVBA本購入を検討されていたら、どれだけお得か確かめてみてください。

【¥0】実質無料のExcelVBAおすすめ本25選!初級~中級まで網羅!

2 件のコメント

  • いつもブログ拝見させて頂いております。
    1点コメントさせてください。

    文中において
    「.Send
    のコメントを外し、Sendメソッドを有効化します。」
    と出てくるのですがこの部分が上手く動作させることができないのですが具体的にはどのように手順進めたらよろしいでしょうか。

    メール自体は作成され、「”Outlookメールの作成が完了しました!”」と表示されるのですが送信まで進まない状態になります。

    • いつもご利用ありがとうございます。

      Sendメソッドを有効化する方法につきまして、
      以下コードの”’”を外していただければと存じます。
      ■変更前
      ‘.Send

      ■変更後
      .Send

      よろしくお願いいたします。

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です