Excelシートからメール一括作成、VBAでOutlook操作

マクロ講座 動画編 96回
マクロ講座

動画でExcel Excelシートからメール一括作成、VBAでOutlook操作

Excelシートからメール一括作成、VBAでOutlook操作

動画版「マクロ講座」です。
今回は Excel 上のデータにある名前やメールアドレス、また必要な情報、こういったデータを使いながら、それぞれの相手に合った内容に書き換えながらメールを送信するという内容のマクロを作ります。 Gmailを使っている場合でも、OutlookにGmailのアカウントを追加することもできるので、ExcelVBAからメールを自動送信できるのは魅力です。

やはりメールは本文の先頭に相手のお名前をきちんと書いておくべきですよね。 なんか一括で送られちゃった感が出ていると寂しくなります。

自分個人に送られたメールだということがきちんとわかるようにしたい事前に準備というのはそういうことです。 そして書くべき内容も、一人一人違ってくる場合、それに合わせて変更するべき箇所を決めておいて情報を入れ替えながら作成していきます。

そして最終的に下書きとして作成したメールを下書きとして保存するのもいいですし、 ディスプレイして、そして一個ずつ確認しながら送ってくというのでもいいですし、一気に送信してもいいわけです。 そのような状況に合わせて使いこなせるようなマクロを作成していきます。

1. OutlookをVBAで使う準備
2. Outlookオブジェクトの作成
3.Mailオブジェクトの作成
4.メール本文の作成
5.1件ずつメールを作成する。

このページからは、以下の内容を学ぶことができます。

  • Excel VBAでOutlookを使うために必要な準備として、参照設定に「Microsoft Outlook 16.0 Object Library」を追加する必要があること。
  • Excel VBAでOutlookを操作するには、Outlook操作用のオブジェクトを作成する必要がある。
  • メール送信に必要なオブジェクトは、「Outlook.Application」と「Outlook.MailItem」の2つ。
  • メール送信用のオブジェクトに送信内容を追加するために、Toメールアドレス、CCメールアドレス、BCCメールアドレス、件名、本文を設定する。
  • 本文の内容は関数を使って作成することができる。
(サンプルファイルは、こちらです。 Excelシートからメール一括作成、VBAでOutlook操作、サンプル96回

マクロ動画 Excelシートからメール一括作成、VBAでOutLook操作

OutlookをExcelVBAで使う準備、参照設定の追加

  1. サンプルで使うシートにはこのように送信先のリストが入力されています。

    Excelでメール一括作成1
  2. まず visual basic editor を開いて、標準モジュールを挿入した状態にします。
    事前準備のために、ツールメニューからツールそして参照設定をクリックしてください。

    Excelでメール一括作成2
  3. 参照可能なライブラリファイルが表示されます。
    その中のmicrosoft outlook 16.0 Object library を探してチェックを入れます。
    これで outlook をオブジェクトとして使うことができるようになります。

    Excelでメール一括作成3
  4. 送信先として使うのは、2列目の氏名と4列目のアドレス、5列目は苗字だけ使おうと思って抜き出した列、6列目は日付、7列目は時刻となっています。 その隣の8列目は件名で、9列目が本文の内容となっています。

    Excelでメール一括作成4
  5. 本文の文字の中で赤字で表示されている部分は次の回の動画で個人名とその個人に合った時刻等に変更する予定です。

    Excelでメール一括作成5

Excelで自動メール送信の手順

  1. 操作の手順は以下のようになります。
    1. Outlookを操作するためにオブジェクトを作成
    2. メール操作用のオブジェクトを作成
    3. メール操作用のオブジェクトに送信内容を追加
    "Toメールアドレス"、 "CCメールアドレス" "BCCメールアドレス"、"件名"、 "本文"
    4. メール送信処理を実行 (表示、保存、送信)
    変数Worksheetには ThisWorkbook.Sheets("mail")をセットします。

    Excelでメール一括作成6
  2. Outlook 操作用のオブジェクトを作成

  3. Outlookを操作するためにOutlook 操作用のオブジェクトとして変数を宣言します。 変数名をOutAppUとしています。

    Excelでメール一括作成7
        Dim OutApp As Outlook.Application
        Set OutApp = New Outlook.Application
  4. メール送信用のオブジェクトを作成

  5. OutAppに対してメール送信の設定をしていくことになります。
    メール送信用のオブジェクトが必要になります。
    メール送信用の変数名として OutMailをつかいます。

    Excelでメール一括作成8
            Dim OutMail As Outlook.MailItem
            Set OutMail = OutApp.CreateItem(olMailItem)
    
  6. メール本文は関数を使って作成しています。
    関数というのは、 CreateBodyOfMailという名前の自作の関数です。
    CreateBodyOfMail は次回作成します。
    引数として wsとrを指定します。これで本文の内容は決まりました。

    Excelでメール一括作成9
  7.         Dim BodyOfMail As String
            BodyOfMail = CreateBodyOfMail(ws, r)
  8. 次にメール送信用のオブジェクト OutMail に対して細かい設定をします。宛先とかです。

    Excelでメール一括作成10
            With OutMail
                .To = ws.Cells(r, 4).Value 'Toメール宛先
                .CC = ws.Cells(1,4).Value 'CCメール宛先
                .Subject = ws.Cells(2, 9).Value 'メール件名
                .body = BodyOfMail  'メール本文
            End With

メールの表示と送信

  1. 件名には送信先の氏名を入れるようにしましょう。

    Excelでメール一括作成11
  2. メール送信処理を実行

  3. メールを送信する場合は、メール送信用オブジェクトに send メソッドを使います。
    しかし、いきなりSendするより、Displayして確認した方が良いでしょう。
    OutMail(メール送信用オブジェクト).Display
    OutMail(メール送信用オブジェクト).Save
    OutMail(メール送信用オブジェクト).Send

    Excelでメール一括作成12
  4. このように、Excelで自動メール送信をする場合は、ループ処理を使って、複数のメールを一括送信することができます。
    今回のコードはメールを作成して、確認するまででした。
    次回は本文を作成するFunctionをつくります。

    Excelでメール一括作成13
    Sub sendMail()
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Sheets("mail")
        
        Dim OutApp As Outlook.Application
        Set OutApp = New Outlook.Application
        
        Dim r As Long, lastrow As Long
        lastrow = ws.Cells(2, 1).End(xlDown).Row
        
        For r = 3 To lastrow
            Dim OutMail As Outlook.MailItem
            Set OutMail = OutApp.CreateItem(olMailItem)
            
            Dim BodyOfMail As String
            BodyOfMail = CreateBodyOfMail(ws, r)
            
            With OutMail
                .To = ws.Cells(r, 4).Value
                .Subject = ws.Cells(r, 5).Value & "様 " & ws.Cells(2, 9).Value
                .body = BodyOfMail
            End With
            OutMail.Display ' OutMail.Save OutMail.Send
            Set OutMail = Nothing
            
        Next r
    End Sub