【Outlook VBA】添付ファイル付きでメールを作成/送信する方法!複数ファイルも可!

Outlook VBAで添付ファイルを付けてメールを作成/送信したいときはないでしょうか。

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

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

・Outlook VBAで添付ファイルを付けてメールを作成/送信したいが方法がわからない。
・Outlook VBAで複数のファイルを一度にメールへ添付したいが方法がわからない。

ですよね。

今回はそんなお悩みを解決する
Outlook VBAで添付ファイルを付けてメールを作成/送信する方法について
まとめます!

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部タカヒロ" & vbCrLf & vbCrLf
.To = "user1@extan.jp"
.CC = "user2@extan.jp"。
.Attachments.Add ("C:\Users\***\Documents\添付ファイル1.xlsx")

Outlook側へVBAを実装します。

添付付きメールを新規作成したいときにマクロを実行すると、

VBAに設定した内容に沿ってメールが作成されます!

VBAのコードを変えると、送信もできます!

さらに、Excel側にまとめた添付ファイルのパスなどのデータから複数の添付ファイルを付けてメールを作成/送信することもできます!!

日常繰り返しているメール作成作業が自動化できると便利ですね。

それでは早速やってみましょう!

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部タカヒロ" & vbCrLf & vbCrLf
        
            .To = "user1@extan.jp" 'Toを指定します。
            .CC = "user2@extan.jp" 'CCを指定します。
            
            'ファイルのパスを指定し、メールへ添付します。
            .Attachments.Add ("C:\Users\***\添付ファイル1.xlsx")

            
            .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"

ファイルのパスを指定します。

.Attachments.Add ("C:\Users\***\添付ファイル1.xlsx")

タカヒロ
タカヒロ
パスは環境にあわせて変更してください。

VBAの実装手順

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

「開発」タブ>「Visual Basic」を押します。

「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] の ThisOutlookSessionをダブルクリックします。

右ペインのコードエリアへ、VBAコードを貼り付けて保存します。

こちらで完了です。

VBAの実行

では早速VBAの実行をしてみましょう。

まずはメールが作成されるか確認をします。

「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

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

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

はい、件名、宛先、本文に指定した値が挿入され、ファイルも添付されていますね!

つづいて送信をしてみましょう。

.Send

のコメントを外し、Sendメソッドを有効化します。

実行してみましょう。

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

VBAの説明

新規にアイテムを作成し、オブジェクトにセットします。

Set objMail = CreateItem(olMailItem)

AttachmentsプロパティのAddメソッドで、メールへファイルを添付します。

.Attachments.Add ("C:\Users\***\添付ファイル1.xlsx")

タカヒロ
タカヒロ
Outlook365ですと、位置決めの調整がうまくいきませんでした。
お手数ですが、添付ファイルの位置調整は手動でお願いします。

メールを表示します。

.Display

メールを送信します。

'.Send

Excelのデータから添付ファイルを付けてメールを作成/送信するVBA

Excelのデータから添付ファイルを付けてメールを作成/送信するVBAについて説明をします。

メールを作成するデータを用意する

Excel側にOutlookのメールを作成するデータを用意しましょう。

サンプルのデータは以下のように1シート目へA列を件名、B列を本文、C列をTo、D列をCc、E列を添付ファイルのパスにしました。
添付ファイルが複数ある場合は「;」で区切ってください。

件名 本文 To Cc 添付ファイルパス
業務日報(2021年12月10日) 宛先各位

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

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

以上/A部タカヒロ

user1@extan.jp user2@extan.jp C:\Users\***\添付ファイル1.xlsx;C:\Users\***\添付ファイル2.xlsx

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
    Dim arrTemp As Variant

    
    '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を指定します。
                
                '添付ファイルのパスを";"区切りで分割し配列へ格納します。
                arrTemp = Split(wsSheet.Cells(i, 5).Value, ";")
                
                '添付ファイルのパスを指定し、メールへ添付します。
                For j = 0 To UBound(arrTemp)
                     .Attachments.Add arrTemp(j)
                Next
                

                '宛先が空欄であるか判定します。
                If wsSheet.Cells(i, 3) = "" Then
                    .Display  'メールを表示します。
                Else
                    .Display 'メールを表示します。
                    '.Send  'メールを送信します。
                End If
           End With
    Next
    
    Else
        MsgBox "処理を中断します"
    End If
    
    'Excelウインドウを閉じます。
     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

件名を指定します。

.Subject = wsSheet.Cells(i, 1)

本文を指定します。

.Body = wsSheet.Cells(i, 2)

Toを指定します。

.To = wsSheet.Cells(i, 3)

CCを指定します。

.CC = wsSheet.Cells(i, 4)

添付ファイルのパスを”;”区切りで分割し配列へ格納します。

arrTemp = Split(wsSheet.Cells(i, 5).Value, ";")

添付ファイルのパスを指定し、メールへ添付します。

For j = 0 To UBound(arrTemp)
.Attachments.Add arrTemp(j)
Next

メールを表示します。

.Display

メールを送信します。

'.Send

Excelのデータから添付ファイルを付けて複数のメールを作成/送信するVBA

次はExcelのデータから添付ファイルを付けて複数のメールを作成/送信するVBAについて説明をします。

タカヒロ
タカヒロ
すでに機能は備わっているのでコードの編集は不要です。

複数メールを作成するデータを用意する

Excel側にOutlookのメールを作成するデータを用意しましょう。

以下のように1シート目へ1行増やして2行にしA列を件名、B列を本文、C列をTo、D列にCc、E列に添付ファイルのパスを入力します。

件名 本文 To Cc 添付ファイルパス
業務日報(2021年12月10日) 宛先各位

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

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

以上/A部タカヒロ

user1@extan.jp user2@extan.jp C:\Users\***\添付ファイル1.xlsx;C:\Users\***\添付ファイル2.xlsx
業務日報(2021年12月13日) 宛先各位

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

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

以上/A部タカヒロ

user1@extan.jp user2@extan.jp C:\Users\***\添付ファイル1.xlsx;C:\Users\***\添付ファイル2.xlsx

VBAの実行

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

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

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

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

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

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

さいごに

いかがでしょうか。

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

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



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

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



タカヒロ

タカヒロ
Excelの基礎がスルスル入ってくるAmazonランク1位の優良Excel本です。

この基礎本と応用技が多いエク短と組み合わせれば、短時間で誰よりもExcelが使いこなせるかと思います。
>詳細を見てみる 

コメントを残す

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