Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法
ビジネスの現場では、特定の条件が満たされたときに顧客へメールを送信したいという場面がよくあります。この記事では、Excelで条件を満たした際に自動的にメールを送る3つの方法をわかりやすく解説します。説明には、「名前」「メールアドレス」「支払期日」の3列からなるサンプルデータを使用します。

Excelで条件を満たした場合にメールを送信する3つの方法
方法1:VBAを使ってセルの値が変化したときにメールを送信する
最初の方法では、Excel VBAのコードを使用して、条件が満たされた時点でメールを送信します。まずVBAモジュールウィンドウを開き、コードを入力して実行することでメールを送れるようにします。ここでは「セルの値が変更されたとき」をコード実行のトリガーとします。
手順:
- まず、「Cell Value Change(セル値変更)」シートを右クリックします。
- 次に、「コードの表示(View Code)」を選択します。

- 続いて、以下のコードを入力します。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("D5"), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value > 700 Then
Call Send_Email_Condition_Cell_Value_Change
End If
End If
End Sub
VBAコードの解説
ここではPrivate Subを使用しています。これは、マクロウィンドウから手動で実行するのではなく、セルの値が変更されたときに自動的にコードが動くためです。
- まず、イベントがWorksheet_ChangeであるPrivate Subを定義しています。
- 次に、対象となるセル数を1つに限定し、そのセルをD5に指定しています。
- さらに、その値が700より大きいかどうかを判定します。
- 最後に、条件が満たされた場合に、SubプロシージャSend_Email_Condition_Cell_Value_Changeが実行されます。

- 最後に、保存してウィンドウを閉じます。
次に、モジュールウィンドウにコードを入力します。VBAモジュールを開くには、以下の手順に従ってください。
- まず、「開発」タブから「Visual Basic」を選択します。
または、Alt + F11キーを押すことでもVBAウィンドウを表示できます。

- 次に、「挿入」から「標準モジュール」を選択します。

このウィンドウに、以下のコードを入力します。
Sub Send_Email_Condition_Cell_Value_Change()
Dim pApp As Object
Dim pMail As Object
Dim pBody As String
Set pApp = CreateObject("Outlook.Application")
Set pMail = pApp.CreateItem(0)
pBody = "Hello, " & Range("B5").Value & vbNewLine & _
"You've Payment Due." & vbNewLine & _
"Please Pay it to avoid extra fees."
On Error Resume Next
With pMail
.To = Range("C5").Value
.CC = ""
.BCC = ""
.Subject = "Request For Payment"
.Body = pBody
.Display 'We can use .Send to Send the Email
End With
On Error GoTo 0
Set pMail = Nothing
Set pApp = Nothing
End Sub
VBAコードの解説
- まず、SubプロシージャSend_Email_Condition_Cell_Value_Changeを呼び出します。
- 次に、変数の型を宣言します。
- 続いて、メールアプリケーションとしてOutlookを指定します。
- その後、コード内でメール本文の内容を設定します。
- 最後に、「.Display」を使用してメール画面を表示しています。この場合、実際に送信するには手動で「送信」ボタンを押す必要があります。なお、「.Send」を使えば、画面を表示せずに自動送信することも可能です。

- その後、モジュールを保存して閉じます。
これで準備完了です。データのセルに699と入力しても、何も起こりません。

しかし、801(700より大きい値)を入力すると、コードが自動的に実行されます。

Outlookのメール作成画面が表示されるので、「送信」ボタンを押せばメールを送信できます。

方法2:複数の条件を満たした場合にメールを送信する
2番目の方法では、データセットを変更し、複数の条件が同時に満たされた場合にメールを送信する方法を紹介します。この方法では、1つのモジュール内に2つのSubプロシージャを使用します。コードが正しく動作すれば、2名の方へメールが送られます。さらに、ファイルをメールに添付して送ることも可能です。

手順:
- まず、方法1と同じ手順でモジュールウィンドウを開き、以下のコードを入力します。
Option Explicit
Sub Send_Email_Condition()
Dim xSheet As Worksheet
Dim mAddress As String, mSubject As String, eName As String
Dim eRow As Long, x As Long
Set xSheet = ThisWorkbook.Sheets("Conditions")
With xSheet
eRow = .Cells(.Rows.Count, 5).End(xlUp).Row
For x = 5 To eRow
If .Cells(x, 4) >= 1 And .Cells(x, 5) = "Yes" Then
mAddress = .Cells(x, 3)
mSubject = "Request For Payment"
eName = .Cells(x, 2)
Call Send_Email_With_Multiple_Condition(mAddress, mSubject, eName)
End If
Next x
End With
End Sub
Sub Send_Email_With_Multiple_Condition(mAddress As String, mSubject As String, eName As String)
Dim pApp As Object
Dim pMail As Object
Set pApp = CreateObject("Outlook.Application")
Set pMail = pApp.CreateItem(0)
With pMail
.To = mAddress
.CC = ""
.BCC = ""
.Subject = mSubject
.Body = "Mr./Mrs. " & eName & ", Please pay it within the next week."
.Attachments.Add ActiveWorkbook.FullName 'Send The File via Email
.Display 'We can use .Send here too
End With
Set pMail = Nothing
Set pApp = Nothing
End Sub
VBAコードの解説
- まず、最初のSubプロシージャSend_Email_Conditionを呼び出します。
- 次に、変数の型を宣言し、「Conditions」シートを操作対象として設定します。
- 続いて、データの最終行番号を取得します。値は5行目から始まるため、コードでは5行目から最終行までをループ処理の範囲としています。
- 条件を満たす行が見つかったら、2つ目のSubプロシージャSend_Email_With_Multiple_Conditionを呼び出します。
- その後、メールアプリケーションとしてOutlookを指定します。
- コード内でメールの内容を設定します。
- ここでは、Attachmentsメソッドを使用して、Excelファイル自体をメールに添付しています。
- 最後に、「.Display」でメール画面を表示します。手動で「送信」を押す必要がありますが、「.Send」に変更すれば表示なしで自動送信も可能です。

- 次に、モジュールを保存して閉じます。
続いて、コードを実行するためにマクロウィンドウを開きます。
- まず、「開発」タブから「マクロ」を選択します。

マクロウィンドウが表示されます。
- 次に、「Send_Email_Condition」を選択します。
- 最後に、「実行」をクリックします。

コードが実行され、条件を満たした2名分のメール作成画面が表示されます。

方法3:日付の条件に基づいてメールを送信する
最後の方法では、支払期日が現在の日付から1週間以内の場合にメールを送信します。この記事の執筆時点では2022年5月19日だったため、7日以内に該当するのは5行目の1件のみです。VBAコードを使って、その方へメールを送信してみましょう。

手順:
- まず、方法1と同じ手順でモジュールウィンドウを開き、以下のコードを入力します。
Public Sub Send_Email_Date_Condition()
Dim rDate, rSend, rText As Range
Dim pApp, pItem As Object
Dim LRow, x As Long
Dim lineBreak, pBody, rSendValue, mSubject As String
On Error Resume Next
Set rDate = Application.InputBox("Select Deadline Range:", "Exceldemy", , , , , , 8)
If rDate Is Nothing Then Exit Sub
Set rSend = Application.InputBox("Select Email Range:", "Exceldemy", , , , , , 8)
If rSend Is Nothing Then Exit Sub
Set rText = Application.InputBox("Select Email Topic Range:", "Exceldemy", , , , , , 8)
If rText Is Nothing Then Exit Sub
LRow = rDate.Rows.Count
Set rDate = rDate(1)
Set rSend = rSend(1)
Set rText = rText(1)
Set pApp = CreateObject("Outlook.Application")
For x = 1 To LRow
rDateValue = ""
rDateValue = rDate.Offset(x - 1).Value
If rDateValue <> "" Then
If CDate(rDateValue) - Date <= 7 And CDate(rDateValue) - Date > 0 Then
rSendValue = rSend.Offset(x - 1).Value
mSubject = rText.Offset(x - 1).Value & " on " & rDateValue
lineBreak = "<br><br>"
pBody = "<HTML><BODY>"
pBody = pBody & "Dear " & rSendValue & lineBreak
pBody = pBody & rText.Offset(x - 1).Value & lineBreak
pBody = pBody & "</BODY></HTML>"
Set pItem = pApp.CreateItem(0)
With pItem
.Subject = mSubject
.To = rSendValue
.HTMLBody = pBody
.Display 'We can also use .Send here
End With
Set pItem = Nothing
End If
End If
Next
Set pApp = Nothing
End Sub
VBAコードの解説
- まず、SubプロシージャSend_Email_Date_Conditionを定義します。
- 次に、変数の型を宣言します。
- 続いて、InputBoxを使用して、対象となるセル範囲をユーザーに選択させます。
- その後、メールアプリケーションとしてOutlookを指定します。
- VBAのCDate関数を使い、期日が現在の日付から7日以内かどうかを判定します。
- コード内でメールの内容を設定します。
- 最後に、「.Display」でメール画面を表示します。「.Send」に変更すれば、表示なしでの自動送信も可能です。

- 次に、モジュールを保存して閉じます。
- 続いて、方法2と同じ手順でマクロウィンドウを開きます。
- 「Send_Email_Date_Condition」を選択し、「実行」をクリックします。

- まず、期日の列を選択して「OK」をクリックします。

- 次に、メールアドレスの列を選択して「OK」をクリックします。

- 続いて、メール内容の列を選択して「OK」をクリックします。

- すると、メール作成ダイアログが表示されます。「送信」ボタンを押せば目的を達成できます。

注意点
- 今回紹介したすべての方法では、Outlookをデフォルトのメールアプリケーションとして使用しています。他のメールアプリを使う場合は、それに応じた別のコードが必要になります。
練習用データについて
各方法の練習用データセットを、Excelファイルに同梱していますので、ぜひ実際に試してみてください。

まとめ
この記事では、Excelで条件を満たした場合にメールを送信する3つの方法を紹介しました。VBAを活用すれば、セルの値の変化、複数条件、日付条件など、さまざまなシーンでメール送信を自動化できます。ぜひ業務の効率化に役立ててください。
関連記事
- マクロを使ってExcelから本文付きメールを送信する方法(簡単な手順付き)
- ExcelからOutlookへ自動的にメールを送信する4つの方法
- セルの内容に基づいてExcelから自動的にメールを送信する2つの方法
- Excelファイルを自動的にメールで送信する3つの適切な方法
- VBAを使ってExcelワークシートからリマインダーメールを自動送信する方法
- 共有Excelファイルで誰が編集しているか確認する方法(クイックステップ)
-
Excelで依存関係をトレースする2つの簡単な方法
Excelでデータを扱う際、依存関係のトレース(Trace Dependents)の使い方を知っておくことは非常に重要です。あるセルの値が他のどのセルに依存しているのかを把握できれば、ワークブック全体の構造理解やトラブルシューティングが格段にしやすくなります。この記事では、Excelで依存関係をトレースする2つの簡単で実用的な方法を解説します。 練習用ワークブックをダウンロードして、実際に手を動かしながら試してみてください。 Excelで依存関係をトレースする2つの方法 ここでは、「ABC商事の上半期売上」というサンプルデータセットを使用します。データは3列構成で、列B・C・Dにはそれぞれ月・
-
Excelで複数の色を条件にデータをフィルターする2つの簡単な方法
この記事では、Microsoft Excelで複数の色を条件にデータをフィルターする方法を解説します。通常、特定の列を複数の色でフィルターすると、他の列も最初に適用したフィルターの影響を受けてしまい、思い通りの結果が得られないことがあります。色による複数条件のフィルタリングは少し工夫が必要ですが、この記事では誰でも実践できる2つの方法を、わかりやすい手順とともに紹介します。 Excelで複数の色を条件にフィルターする2つの方法 ここでは、営業担当者の氏名、担当地域、売上高がそれぞれB列・C列・E列に入力されたサンプルデータセットを使用します。このデータには、セルごとに異なる色が設定されています