Notice: 関数 _load_textdomain_just_in_time が誤って呼び出されました。cocoon ドメインの翻訳の読み込みが早すぎました。これは通常、プラグインまたはテーマの一部のコードが早すぎるタイミングで実行されていることを示しています。翻訳は init アクション以降で読み込む必要があります。 詳しくは WordPress のデバッグをご覧ください。 (このメッセージはバージョン 6.7.0 で追加されました) in /home/xs182025/consulting-campus.site/public_html/wp-includes/functions.php on line 6114
【Excelマクロ/VBA】Outlookメールを作成・送信する | CONSULTING CAMPUS

【Excelマクロ/VBA】複数のメールを一括作成・送信する

create-and-send-outlook-mail-with-VBA VBA
この記事は約7分で読めます。
スポンサーリンク

本記事では、ExcelのVBAを使用して、複数のメールを自動で作成・一括送信する方法をご紹介します。同じまたは似た内容のメールを別の宛先に複数送信したい場合など、複数のOutlookメールを作成・送信したい際に便利・活用できます。

  • 宛先と本文だけを変えて、同じCc先及び件名で複数のメールを一括送信したい
  • 機械的なメールの作成・送信を効率化したい
スポンサーリンク

Excelのマクロ・VBAでOutlookのメールを作成・送信する方法

下記のコードでは、Excelのマクロ・VBAを使用してOutlookのメールを複数の宛先に一括で作成し送信することができます。前提として、A列に宛先、B列にCc先、C列に件名、D列に本文を入力しておいてください。

より詳細な解説は後のセクションで行います。

Sub SendEmailsFromExcel()
    ' Written by consulting-campus.site
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim ws As Worksheet
    Dim LastRow As Long, i As Long
    
    Set OutlookApp = CreateObject("Outlook.Application")
    Set ws = ActiveSheet
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    For i = 2 To LastRow
        Set OutlookMail = OutlookApp.CreateItem(0)
        
        With OutlookMail
            .To = ws.Cells(i, 1).Value      ' 宛先
            .CC = ws.Cells(i, 2).Value      ' Cc先
            .Subject = ws.Cells(i, 3).Value ' 件名
            .Body = ws.Cells(i, 4).Value    ' 本文
            .Display                        ' メールを表示
            .Send                           ' メールを送信
        End With
        
        Set OutlookMail = Nothing
    Next i
    
    Set OutlookApp = Nothing
End Sub

マクロ・VBAでのOutlookメールを複数一括で作成・送信する方法の解説

マクロ・VBAでOutlookのメールを一括作成・送信するには、下記の2ステップで簡単に実現することができます。ここでは、自動で一括送信するニーズに対応できるように、入力した行数分の複数のメールを一度に処理するコード設計になっています。

マクロ・VBAでOutlookのメールを複数作成・送信するステップ

宛先・Cc先・件名・本文を用意したテーブルの作成

まず初めに、メールを送信するために必要な情報を格納したテーブルを作成します。A~D列以外は使用されないので、適宜サポート列を追加してください。(例: 各メールの本文で、={名前}&"様"とするために使用しない列に名前を入力する、など)

  • A列: 宛先のメールアドレス。複数存在する場合は ; (セミコロン) で区切って入力してください
  • B列: Cc先のメールアドレス。複数存在する場合は ; (セミコロン) で区切って入力してください
  • C列: メールの件名
  • D列: メールの本文

完成イメージとしては下記のとおりです。何行入力しても構いませんが、間に空白行を入れないようにしてください。(上に詰めて入力してください)

メールに関する情報を入力したテーブル
マクロ・VBAの実行

次に、Outlookのメールを作成し、自動で一括送信するためのマクロ・VBAを実行します。マクロ・VBAを実行するステップは下記のとおりです。

  1. Alt + F11 キーを押してビジュアルエディタを開く
  2. [挿入]タブ→[モジュール]より、新規モジュールを作成
  3. VBAコードの貼り付け後、実行

より詳細な解説は【丁寧に解説】エクセルでマクロ・VBAを実行するをご確認ください

今回貼り付けるコードは下記のとおりです。特に入力や調整が必要な箇所はありませんので、そのまま貼り付けて実行してください。

Sub SendEmailsFromExcel()
    ' Written by consulting-campus.site
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim ws As Worksheet
    Dim LastRow As Long, i As Long
    
    Set OutlookApp = CreateObject("Outlook.Application")
    Set ws = ActiveSheet
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    For i = 2 To LastRow
        Set OutlookMail = OutlookApp.CreateItem(0)
        
        With OutlookMail
            .To = ws.Cells(i, 1).Value      ' 宛先
            .CC = ws.Cells(i, 2).Value      ' Cc先
            .Subject = ws.Cells(i, 3).Value ' 件名
            .Body = ws.Cells(i, 4).Value    ' 本文
            .Display                        ' メールを表示
            .Send                           ' メールを送信
        End With
        
        Set OutlookMail = Nothing
    Next i
    
    Set OutlookApp = Nothing
End Sub

このコードの動作を興味がある方に向けて解説します。

ステップ1: 基本セットアップ

  • Dim XXX As ~ の形式で変数を定義します
  • Set OutlookApp = CreateObject("Outlook.Application")にて、Excel VBAでOutlookアプリを使用するためのオブジェクトを作成します。オブジェクトを変数に代入するためにはSet XXX = ~のようにSetが必要になります
  • ActiveSheet(現在アクティブなシート)をwsという変数に格納しています。さらに、LastRowは、現在アクティブなシートのA列で最後の行(データが存在する最後の行)を見つけるために使用されます。これにより、入力した全データがカバーされます

ステップ2: メール作成と送信のループ

  • ループ(For i = 2 To LastRow)は、2行目からLastRow(データの最終行)まで繰り返し処理を行います。1行目は通常、列のヘッダー(タイトル)を含むため、データの処理は2行目から開始します
  • ループ内で、Outlookのメールアイテム(メール本体)を作成します。これには、宛先(.To)、Cc(.CC)、件名(.Subject)、本文(.Body)を、Excelシートから読み取った値で設定します
  • .Displayメソッドは、作成したメールの表示.Sendメソッドは作成したメールの送信を行います。メールの内容を確認だけして送信は手動で行いたい場合などは.Sendの行をコメントアウトしてください
  • メールアイテムを使用し終わったら、解放(Nothingに設定)しています。これは、不要なリソースを適切に管理し、メモリリークを防ぐための一般的な慣例です

ステップ3: クリーンアップ

  • ループが終了した後、OutlookAppオブジェクトも解放しています。これにより、スクリプトの実行が終了したことを明確にし、全てのリソースが適切にクリーンアップされます

おわりに

以上が、ExcelのVBA・マクロを使用して、Outlookのメールを作成し、自動で送信する方法の解説となります。

ご質問やご不明点がある場合はお気軽にコメントお待ちしております。

ご精読いただきありがとうございました。

コメント

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