ExcelVBAでOutlookからメール送信

中級VBA

はじめに

 ExcelVBAからOutlookを操作してメールを送信するには、VBEの「参照設定」で「Microsoft Outlook 1x.0 Object Library」を有効にしてライブラリを利用します。
 メール送信元のアカウントの設定はOutlookで設定したものを利用するので、送信先のメールアドレス、件名、本文など基本的な項目を設定するだけで簡単に操作できます。

必要なライブラリにチェックを入れる

 VBEの「ツール」から「参照設定」をクリックして一覧から、「Microsoft Outlook 1x.0 Object Library」にチェックを入れます。 (ライブラリはExcelのバージョンによって違います。)

Outlookのアカウント設定

 Outlookでメール送信できるように、アカウント情報を設定しておきます。
 ここではOutlookからメール送信できる状態である事を前提としているので説明は省略します。

サンプルプログラム

 まずは、必要最低限のコードで動作を確認してみましょう。

Sub SendEmailTest()
    Dim OutlookApp As Outlook.Application
    Dim myMail As Outlook.MailItem
    
    Set OutlookApp = New Outlook.Application
    Set myMail = OutlookApp.CreateItem(olMailItem) 'olMailItem = MailItem オブジェクト
    
    With myMail
        .To = "●●●●●@●●●●.com"      'メールの宛先
        .subject = "テスト送信です。"   'メールの件名
        .BodyFormat = olFormatPlain     'メールの形式
        .Body = "ExcelVBAでOutlookからメールを送信しています。"      'メールの本文
        .Display    '新規メール画面を表示
        '.Send  'メールを送信
    End With
    
    MsgBox "終了しました。"
End Sub

 最初に Outlook.Application オブジェクトを生成します。このオブジェクトでOutlookをコントロールします。
 次に、このオブジェクトから MailItem オブジェクト を作ります。これはメール1件分のオブジェクトになります。

 MailItem オブジェクトに様々なプロパティを設定していきます。
.To メールの宛先
.subject メールの件名
.BodyFormat メールの形式(今回はテキスト形式を指定)
.Body メールの本文

 
 最後に Display を実行する事でOutlookの新規メール画面が開きます。

 この画面のまま「送信」を押してメールを送信すれば、実際にメールが送信されます。
 テスト送信が完了したら‘.Send の先頭のアポストロフィを外して、代わりに .Displayアポストロフィを付けてコメントアウトしましょう。


‘.Display ‘新規メール画面を表示
.Send ‘メールを送信

 これで新規メール画面が表示されずにメール送信が実行されるようになります。

一斉メール送信

 上記のサンプルコードを改造して一斉メール送信プログラムを書いてみましょう。
 Sheet1シートに以下のようにメールの宛先、メールの件名、メール本文を配置します。

 プログラムは以下の様になります。

Sub SendMyEmails()
    Dim OutlookApp As Outlook.Application
    Dim myMail As Outlook.MailItem
    Dim sh As Worksheet
    Dim i As Long
    
    Set OutlookApp = New Outlook.Application
    Set sh = Worksheets("Sheet1")
    
    For i = 3 To 9
        If sh.Cells(i, "C") <> "" Then
            Set myMail = OutlookApp.CreateItem(olMailItem) 'MailItem オブジェクト
            With myMail
            .To = sh.Cells(i, "C")     'メールの宛先
            .subject = sh.Range("E3")   'メールの件名
            .BodyFormat = olFormatPlain     'メールの形式
            .Body = Replace(sh.Range("E5"), "[[[氏名]]]", sh.Cells(i, "B"))   'メールの本文
            '.Display    '新規メール画面を表示
            .Send  'メールを送信
            End With
        End If
    Next i
 
    MsgBox "終了しました。"
End Sub

 前回のプログラムと大きく異なるのはFor文で繰り返しを行っている点です。
 まず、C列を見てメールアドレスが無い場合は飛ばしています。
 メールアドレスがあれば、宛先件名本文をプロパティにセットしていきます。
 
 メール本文の [[[氏名]]] 部分は、Replace関数でB列の名前に差し替えています。
 
 それと、MailItem オブジェクトは、メール1通につき1つ必要なのでFor文の内部で生成しなければいけない点に注意してください。
 Set myMail = OutlookApp.CreateItem(olMailItem)

 実行すると4件のメールが送信されます。最初は自分の所にメールが届くようにテストしてから実際の宛先メールアドレスを入力するようにしましょう。

最後に

 今回はOutlookでメール送信させる基本的なプログラムを紹介しました。
 この手のプログラムで大事な事は、十分テストを行ってから本番に臨む事です。送信先に迷惑をかけないように十分注意しましょう。

 今回のような単純なプログラムでも、応用すれば一斉メール送信のプログラムに発展させることができました。
 さらに、色々な事が出来そうなのでコンテンツを追加していきたいと思います。

ExcelVBAでOutlookからメール送信2

タイトルとURLをコピーしました