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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

Excelで条件を満たした場合にメールを送信する3つの方法

方法1:VBAを使ってセルの値が変化したときにメールを送信する

最初の方法では、Excel VBAのコードを使用して、条件が満たされた時点でメールを送信します。まずVBAモジュールウィンドウを開き、コードを入力して実行することでメールを送れるようにします。ここでは「セルの値が変更されたとき」をコード実行のトリガーとします。

手順:

  • まず、「Cell Value Change(セル値変更)」シートを右クリックします。
  • 次に、「コードの表示(View Code)」を選択します。

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

  • 続いて、以下のコードを入力します。
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が実行されます。

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

  • 最後に、保存してウィンドウを閉じます。

次に、モジュールウィンドウにコードを入力します。VBAモジュールを開くには、以下の手順に従ってください。

  • まず、「開発」タブから「Visual Basic」を選択します。

または、Alt + F11キーを押すことでもVBAウィンドウを表示できます。

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

このウィンドウに、以下のコードを入力します。

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」を使えば、画面を表示せずに自動送信することも可能です。

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

  • その後、モジュールを保存して閉じます。

これで準備完了です。データのセルに699と入力しても、何も起こりません。

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

方法2:複数の条件を満たした場合にメールを送信する

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

手順:

  • まず、方法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」に変更すれば表示なしで自動送信も可能です。

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

  • 次に、モジュールを保存して閉じます。

続いて、コードを実行するためにマクロウィンドウを開きます。

  • まず、「開発」タブから「マクロ」を選択します。

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

マクロウィンドウが表示されます。

  • 次に、「Send_Email_Condition」を選択します。
  • 最後に、「実行」をクリックします。

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

方法3:日付の条件に基づいてメールを送信する

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

手順:

  • まず、方法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」に変更すれば、表示なしでの自動送信も可能です。

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

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

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

注意点

  • 今回紹介したすべての方法では、Outlookをデフォルトのメールアプリケーションとして使用しています。他のメールアプリを使う場合は、それに応じた別のコードが必要になります。

練習用データについて

各方法の練習用データセットを、Excelファイルに同梱していますので、ぜひ実際に試してみてください。

Excelで条件を満たした場合にメールを自動送信する3つの簡単な方法

まとめ

この記事では、Excelで条件を満たした場合にメールを送信する3つの方法を紹介しました。VBAを活用すれば、セルの値の変化、複数条件、日付条件など、さまざまなシーンでメール送信を自動化できます。ぜひ業務の効率化に役立ててください。

関連記事

  • マクロを使ってExcelから本文付きメールを送信する方法(簡単な手順付き)
  • ExcelからOutlookへ自動的にメールを送信する4つの方法
  • セルの内容に基づいてExcelから自動的にメールを送信する2つの方法
  • Excelファイルを自動的にメールで送信する3つの適切な方法
  • VBAを使ってExcelワークシートからリマインダーメールを自動送信する方法
  • 共有Excelファイルで誰が編集しているか確認する方法(クイックステップ)
  1. Excelで依存関係をトレースする2つの簡単な方法

    Excelでデータを扱う際、依存関係のトレース(Trace Dependents)の使い方を知っておくことは非常に重要です。あるセルの値が他のどのセルに依存しているのかを把握できれば、ワークブック全体の構造理解やトラブルシューティングが格段にしやすくなります。この記事では、Excelで依存関係をトレースする2つの簡単で実用的な方法を解説します。 練習用ワークブックをダウンロードして、実際に手を動かしながら試してみてください。 Excelで依存関係をトレースする2つの方法 ここでは、「ABC商事の上半期売上」というサンプルデータセットを使用します。データは3列構成で、列B・C・Dにはそれぞれ月・

  2. Excelで複数の色を条件にデータをフィルターする2つの簡単な方法

    この記事では、Microsoft Excelで複数の色を条件にデータをフィルターする方法を解説します。通常、特定の列を複数の色でフィルターすると、他の列も最初に適用したフィルターの影響を受けてしまい、思い通りの結果が得られないことがあります。色による複数条件のフィルタリングは少し工夫が必要ですが、この記事では誰でも実践できる2つの方法を、わかりやすい手順とともに紹介します。 Excelで複数の色を条件にフィルターする2つの方法 ここでは、営業担当者の氏名、担当地域、売上高がそれぞれB列・C列・E列に入力されたサンプルデータセットを使用します。このデータには、セルごとに異なる色が設定されています