Office
 Computer >> コンピューター >  >> ソフトウェア >> Office

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

この記事では、日付に基づいてExcelからメールを自動送信する最適な方法をご紹介します。通常、OutlookGmailからメールを送るのは簡単ですが、特定の日時や日付に合わせてメールを送りたい場合には、Microsoft Excelを効果的に活用できます。

サンプルデータにはいくつかのメールアドレスが含まれています(すべてダミーアドレスですが、admin@wsxdn.comのみ筆者自身のアドレスです)。動作確認のため筆者のアドレスを使用しています。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

日付に基づいてExcelからメールを自動送信する3つの方法

方法1: Excel VBAを使って固定日付に基づきメールを自動送信する

Microsoft Visual Basic for Application(VBA)を使えば、日付に基づいてメールを自動送信できます。メールを送信したい日付と宛先のリストを事前に作成しておくことで、該当する日になったときに自動的に処理が実行されます。以下の手順で具体的な流れを見ていきましょう。このセクションでは日付のみを扱います。

手順:

  • まず、開発タブから >> Visual Basic をクリックします。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • VBAウィンドウが開きます。挿入 >> 標準モジュールを選択してください。
  • Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】次のコードをVBAモジュールに入力します。
Sub SendEmail01()
Dim Range_Select As Range
Dim Date_Range As Range
Dim Cell_Address As String
Dim Subject, Email_From, Email_To, Cc, Bcc, Email_Text As String
Dim Email_Obj, Single_Mail As Object
On Error Resume Next
Cell_Address = ActiveWindow.RangeSelection.Address
Set Range_Select = Application.InputBox("Select a range:", _
"Message Box", Cell_Address, , , , , 8)
If Range_Select Is Nothing Then Exit Sub
For Each Date_Range In Range_Select
If Date_Range.Value = Date Then
Subject = Application.InputBox("Subject: ", "Message", , , , , , 2)
Email_From = Application.InputBox("Send from: ", "Message Box", , , , , , 2)
Email_To = Application.InputBox("Send to: ", "Message Box", , , , , , 2)
If Email_To = "" Then Exit Sub
Cc = Application.InputBox("CC: ", "Message Box", , , , , , 2)
Bcc = Application.InputBox("BCC: ", "Message Box", , , , , , 2)
Email_Text = Application.InputBox("Message Body: ", "Message Box", , , , , , 2)
Set Email_Obj = CreateObject("Outlook.Application")
Set Single_Mail = Email_Obj.CreateItem(0)
With Single_Mail
.Subject = Subject
.To = Email_To
.Cc = Cc
.Bcc = Bcc
.Body = Email_Text
.send
End With
End If
Next
End Sub

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

コードの解説

  • まず、必要な変数を宣言しています。Range_SelectDate_RangeRange型Cell_AddressSubjectEmail_FromEmail_ToCcBccEmail_TextString型Email_ObjSingle_MailObject型として定義します。
  • 次に、InputBox(メッセージボックス)でセル範囲を選択できるように、Range_Selectを設定します。
  • その後、VBAのIFステートメントValueを判定し、SubjectEmail_FromEmail_ToInputBoxから取得します。
  • 宛先のメールアドレスが空の場合(Email_To = "")は、プロシージャを終了します。そうでなければ、さらに別のIFステートメントで変数を処理します。Ccはカーボンコピー(Carbon Copy)、Bccはブラインドカーボンコピー(Blind Carbon Copy)のことで、他の宛先にも同じメールを送るために使用します。
  • 次にOutlookアプリケーションオブジェクトを作成し、Email_Objとして定義します。また、Single_Mailを使ってEmail_Objのアイテムを作成します。
  • 最後にWithステートメントで、SubjectEmail_ToCcBccEmail_Textをメールの必須項目として設定します。同時に.Sendコマンドも記述します。
  • シートに戻り、現在のマクロ名であるSendEmail01を実行します。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • 実行すると、日付範囲を選択するよう促すメッセージボックスが表示されます。範囲を選択してOKをクリックしましょう。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • 続いて別のメッセージボックスが表示されるので、件名を入力してOKをクリックします。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • その後も、メール送信に必要な情報の入力を求める一連のメッセージボックスが表示されます。以下の画像に従って進めてください。
  • 自分のメールアドレスを入力します。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • メールの送信先となるメールアドレスを入力します。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • CCの宛先アドレスを入力します。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • 必要であれば、BCCの宛先もメッセージボックスに入力します(今回は未入力)。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • 本文となるメッセージを入力します。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • 最後のメッセージボックスの後、Microsoft Outlookから警告ダイアログが表示されることがあります。許可をクリックしてください。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

この操作により、各メッセージボックスに入力したアドレス宛てにメールが送信されます。

これが送信された本メールです。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

そしてこちらはCC(カーボンコピー)で受信したメールです。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

以上のように、Excelから日付に基づいてメールを自動送信することが可能です。

関連記事: Excelマクロでメールを自動送信する方法(実例3選)

方法2: 今後の日付に基づいてExcelからメールを自動送信する

このセクションでは、未来の日付に基づいてメールを送信する方法を解説します。例えば、イベントの3日前や7日前に誰かにリマインドメールを送りたいといったケースに役立ちます。以下で詳しく見ていきましょう。

手順:

  • まず、方法1を参照してVBAモジュールの開き方を確認してください。
  • 次のコードをVBAモジュールに入力します。
Public Sub SendEmail02()
Dim Date_Range As Range
Dim Mail_Recipient As Range
Dim Email_Text As Range
Dim Outlook_App_Create As Object
Dim Mail_Item As Object
Dim Last_Row As Long
Dim VB_CR_LF, Email_Body, Date_Range_Value, Send_Value, Subject As String
Dim i As Long
On Error Resume Next
Set Date_Range = Application.InputBox("Please choose the date range:", "Message Box", , , , , , 8)
If Date_Range Is Nothing Then Exit Sub
Set Mail_Recipient = Application.InputBox("Please select the Email addresses:", "Message Box", , , , , , 8)
If Mail_Recipient Is Nothing Then Exit Sub
Set Email_Text = Application.InputBox("Select the Email Text:", "Message Box", , , , , , 8)
If Email_Text Is Nothing Then Exit Sub
Last_Row = Date_Range.Rows.Count
Set Date_Range = Date_Range(1)
Set Mail_Recipient = Mail_Recipient(1)
Set Email_Text = Email_Text(1)
Set Outlook_App_Create = CreateObject("Outlook.Application")
For i = 1 To Last_Row
Date_Range_Value = ""
Date_Range_Value = Date_Range.Offset(i - 1).Value
If Date_Range_Value <> "" Then
If CDate(Date_Range_Value) - Date <= 7 And CDate(Date_Range_Value) - Date > 0 Then
Send_Value = Mail_Recipient.Offset(i - 1).Value
Subject = Email_Text.Offset(i - 1).Value & " on " & Date_Range_Value
VB_CR_LF = "<br><br>"
Email_Body = "<HTML><BODY>"
Email_Body = Email_Body & "Dear " & Send_Value & VB_CR_LF
Email_Body = Email_Body & "Text : " & Email_Text.Offset(i - 1).Value & VB_CR_LF
Email_Body = Email_Body & "</BODY></HTML>"
Set Mail_Item = Outlook_App_Create.CreateItem(0)
With Mail_Item
.Subject = Subject
.To = Send_Value
.HTMLBody = Email_Body
.Display
End With
Set Mail_Item = Nothing
End If
End If
Next
Set Outlook_App_Create = Nothing
End Sub

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

コードの解説

  • まず必要な変数を宣言します。Date_RangeMail_RecipientEmail_TextRange型Outlook_App_CreateMail_ItemObject型Last_RowiLong型VB_CR_LF(Visual Basic Carriage Return Line Feed)、Email_BodyDate_Range_ValueSend_ValueSubjectString型です。
  • 次に、メッセージボックスで日付範囲を選択できるようDate_RangeInputBoxに設定します。Ifステートメントにより、Date_RangeNothingの場合はプロシージャを終了します。
  • 同様に、Mail_RecipientEmail_TextInputBoxに設定します。
  • その後、Outlookアプリケーションオブジェクトを作成し、Outlook_App_Createとして定義します。
  • ここで期間(インターバル)を設定します。このコードでは期間は7日です。例えば、今日が5月19日で、5月20日〜26日の間に予定されているイベントのリマインダーや挨拶メールを送りたい場合、その期間内の日付であれば受信者にメールが届きます。期間外の日付には送信されません。
  • 続いて、メール本文(Email_Body)を整形するためのコマンドを記述し、Withステートメントでメールの必須項目を定義します。
  • ここでは.Displayコマンドを使用しているため、Outlookが下書きメールを開き、送信前に内容を確認できます。下書き確認が不要な場合は.Sendコマンドに置き換えてください。ただし、両方のコマンドを同時に使わないように注意しましょう。
  • シートに戻り、マクロ名SendEmail02を実行します。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • 実行すると、日付範囲を選択するよう促すメッセージボックスが表示されます。範囲を選択してOKをクリックします。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • 次に、メールアドレスの範囲を選択するメッセージボックスが表示されます。範囲を選択してOKをクリックしましょう。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • その後、メッセージ本文のテキスト範囲を選択してOKをクリックします。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • 5月21日から24日分のメール下書きが表示されます。ここでID admin@wsxdn.comは実際のメールアドレスなので、動作例としてこのアドレスにメールを送信しました。必要に応じてCCの宛先を追加することも可能です。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • 実際に受信箱を確認してみましょう。迷惑メールフォルダに振り分けられることもあるため、すべてのフォルダをチェックしてください。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

以上のように、今後の日付に基づいてメールを自動送信できます。

関連記事: VBAを使ってExcelワークシートからリマインダーメールを自動送信する方法

あわせて読みたい

  • 共有Excelファイルの編集者を確認する方法(クイックステップ付き)
  • Excelでワークブック共有を有効にする方法
  • 複数ユーザー向けにExcelファイルを共有する方法
  • OutlookとExcelを使って一括メール送信する3つの方法
  • 添付ファイル付きでExcelからメールを送るマクロの使い方

方法3: 特定の1つのアドレスへ日付に基づいてメールを自動送信する

単一のアドレスに対して、日付に基づいてメールを自動送信することも可能です。送信したい日付のリストを事前に作成しておけば、該当日に自動で処理が行われます。以下の手順で確認していきましょう。

手順:

  • まず、方法1を参照してVBAモジュールの開き方を確認します。
  • 次のコードをVBAモジュールに入力してください。
Option Explicit
Sub SendEmail03()
Dim Date_Range As Range
Dim rng As Range
Set Date_Range = Range("B5:B10")
For Each rng In Date_Range
If rng.Value = Date Then
Dim Subject, Send_From, Send_To, _
Cc, Bcc, Body As String
Dim Email_Obj, Single_Mail As Variant
Subject = "Hello there!"
Send_From = "admin@wsxdn.com"
Send_To = "admin@wsxdn.com"
Cc = "admin@wsxdn.com"
Bcc = ""
Body = "Hope you are enjoying the article"
On Error GoTo debugs
Set Email_Obj = CreateObject("Outlook.Application")
Set Single_Mail = Email_Obj.CreateItem(0)
With Single_Mail
.Subject = Subject
.To = Send_To
.Cc = Cc
.Bcc = Bcc
.Body = Body
.send
End With
End If
Next
Exit Sub
debugs:
If Err.Description <> "" Then MsgBox Err.Description
End Sub

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

コードの解説

  • まず、必要な変数rngDate_RangeRange型として宣言します。
  • 次に、Date_Rangeのセル範囲(B5:B10)を定義します。
  • その後、VBAのIFステートメントValueを判定し、SubjectSend_FromSend_ToCcBccBodyString型として設定します。また、Email_ObjSingle_MailVariant型として宣言します。
  • 続いて、SubjectSend_FromSend_ToCcBccにそれぞれテキスト値を設定します。
  • 後半ではOutlookアプリケーションオブジェクトを作成し、Email_Objとして定義します。Single_Mailを使ってEmail_Objのアイテムを作成します。
  • 最後にWithステートメントで、SubjectSend_ToCcBccBodyをメールの必須項目として定義し、.Sendコマンドを記述します。
  • シートに戻り、マクロを実行します。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

  • その後、Microsoft Outlookから警告ダイアログが表示された場合は、許可をクリックしてください。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

この操作により、設定したアドレス宛てにメールが送信されます。

これが送信された本メールです。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

そしてこちらはCC(カーボンコピー)で受信したメールです。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

以上のように、Excelから特定の1つのアドレスへ日付に基づいてメールを自動送信できます。

関連記事: 条件を満たしたときにExcelからメールを自動送信する方法

練習用データ

このセクションでは、本記事で使用したサンプルデータを提供しています。ぜひご自身でも練習してみてください。

Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】

注意点

本記事のVBAコードを実行する際は、必ずOutlookアカウントを開いてログインしておいてください。

まとめ

この記事では、日付に基づいてExcelからメールを自動送信するための実践的な方法を学びました。より良いアイデアやフィードバックがあれば、ぜひコメント欄でお聞かせください。今後の記事作りの参考にさせていただきます。

関連記事

  • 【解決済み】Excelでワークブック共有が表示されないときの対処法(簡単な手順付き)
  • Excelのリストからメールを送信する2つの効果的な方法
  • 編集可能なExcelスプレッドシートをメールで送る3つのクイックメソッド
  • Excelからメールを送信するマクロ(実例5選)
  • 本文付きでExcelからメールを送るマクロ(便利なケース3選)
  • Excelマクロ: セル内のアドレスにメールを送信する2つの簡単な方法
  1. Excelでセルの値に基づいてメールを自動送信する2つの方法(VBA&差し込み印刷)

    Excel(エクセル)のワークシートには、さまざまな情報を保存しています。例えば、重要な取引先や担当者のメールアドレスを管理している方も多いのではないでしょうか。通常、メールの送信はOutlookやGmailから直接行うのが手軽ですが、「セルに入力された内容に応じて自動的にメールを送りたい」という場面では、Microsoft Excelを活用すると非常に効率的です。本記事では、セルの内容に基づいてExcelからメールを自動送信するための、実用的な2つの方法を分かりやすい図解付きでご紹介します。 セルの内容に基づいてExcelからメールを自動送信する2つの方法 ここでは、Armani Group

  2. ExcelからOutlookへ添付ファイル付きで差し込み印刷(メールマージ)する方法|VBA活用の2つの実例

    差し込み印刷(メールマージ)を活用すれば、受信者ごとに個別化されたドキュメントをまとめて作成できます。ExcelからOutlookへ添付ファイル付きで差し込み印刷するテクニックをお探しなら、この記事がまさにうってつけです。本記事では、すぐに使える2つの具体例を挙げながら、手順を丁寧に解説していきます。最後まで読んで、ぜひマスターしてください。 添付ファイル付きでExcelからOutlookへ差し込み印刷する2つの方法 ここでは、ExcelからOutlookへ添付ファイル付きで差し込み印刷するための、効果的かつ実用的な2つの方法を紹介します。どちらの方法もカスタマイズ性が高く、用途に合わせて柔軟