Excelで日付に基づいてメールを自動送信する3つの方法【VBAコード付き解説】
この記事では、日付に基づいてExcelからメールを自動送信する最適な方法をご紹介します。通常、OutlookやGmailからメールを送るのは簡単ですが、特定の日時や日付に合わせてメールを送りたい場合には、Microsoft Excelを効果的に活用できます。
サンプルデータにはいくつかのメールアドレスが含まれています(すべてダミーアドレスですが、admin@wsxdn.comのみ筆者自身のアドレスです)。動作確認のため筆者のアドレスを使用しています。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

以上のように、今後の日付に基づいてメールを自動送信できます。
関連記事: 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
コードの解説
- まず、必要な変数rngとDate_RangeをRange型として宣言します。
- 次に、Date_Rangeのセル範囲(B5:B10)を定義します。
- その後、VBAのIFステートメントでValueを判定し、Subject、Send_From、Send_To、Cc、Bcc、BodyをString型として設定します。また、Email_ObjとSingle_MailはVariant型として宣言します。
- 続いて、Subject、Send_From、Send_To、Cc、Bccにそれぞれテキスト値を設定します。
- 後半ではOutlookアプリケーションオブジェクトを作成し、Email_Objとして定義します。Single_Mailを使ってEmail_Objのアイテムを作成します。
- 最後にWithステートメントで、Subject、Send_To、Cc、Bcc、Bodyをメールの必須項目として定義し、.Sendコマンドを記述します。
- シートに戻り、マクロを実行します。

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

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

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

以上のように、Excelから特定の1つのアドレスへ日付に基づいてメールを自動送信できます。
関連記事: 条件を満たしたときにExcelからメールを自動送信する方法
練習用データ
このセクションでは、本記事で使用したサンプルデータを提供しています。ぜひご自身でも練習してみてください。

注意点
本記事のVBAコードを実行する際は、必ずOutlookアカウントを開いてログインしておいてください。
まとめ
この記事では、日付に基づいてExcelからメールを自動送信するための実践的な方法を学びました。より良いアイデアやフィードバックがあれば、ぜひコメント欄でお聞かせください。今後の記事作りの参考にさせていただきます。
関連記事
- 【解決済み】Excelでワークブック共有が表示されないときの対処法(簡単な手順付き)
- Excelのリストからメールを送信する2つの効果的な方法
- 編集可能なExcelスプレッドシートをメールで送る3つのクイックメソッド
- Excelからメールを送信するマクロ(実例5選)
- 本文付きでExcelからメールを送るマクロ(便利なケース3選)
- Excelマクロ: セル内のアドレスにメールを送信する2つの簡単な方法
-
Excelでセルの値に基づいてメールを自動送信する2つの方法(VBA&差し込み印刷)
Excel(エクセル)のワークシートには、さまざまな情報を保存しています。例えば、重要な取引先や担当者のメールアドレスを管理している方も多いのではないでしょうか。通常、メールの送信はOutlookやGmailから直接行うのが手軽ですが、「セルに入力された内容に応じて自動的にメールを送りたい」という場面では、Microsoft Excelを活用すると非常に効率的です。本記事では、セルの内容に基づいてExcelからメールを自動送信するための、実用的な2つの方法を分かりやすい図解付きでご紹介します。 セルの内容に基づいてExcelからメールを自動送信する2つの方法 ここでは、Armani Group
-
ExcelからOutlookへ添付ファイル付きで差し込み印刷(メールマージ)する方法|VBA活用の2つの実例
差し込み印刷(メールマージ)を活用すれば、受信者ごとに個別化されたドキュメントをまとめて作成できます。ExcelからOutlookへ添付ファイル付きで差し込み印刷するテクニックをお探しなら、この記事がまさにうってつけです。本記事では、すぐに使える2つの具体例を挙げながら、手順を丁寧に解説していきます。最後まで読んで、ぜひマスターしてください。 添付ファイル付きでExcelからOutlookへ差し込み印刷する2つの方法 ここでは、ExcelからOutlookへ添付ファイル付きで差し込み印刷するための、効果的かつ実用的な2つの方法を紹介します。どちらの方法もカスタマイズ性が高く、用途に合わせて柔軟