업무를 하다 보면 특정 조건이 충족될 때 고객에게 이메일을 발송해야 하는 상황이 자주 발생합니다. 이 글에서는 엑셀(Excel)에서 조건이 만족되었을 때 이메일을 자동으로 전송하는 3가지 방법을 소개합니다. 설명을 위해 '이름(Name)', '이메일(Email)', '미납 결제(Payment Due)'라는 3개의 열로 구성된 데이터셋을 사용하겠습니다.

엑셀에서 조건 충족 시 이메일을 보내는 3가지 방법
1. VBA를 활용해 셀 값이 변경될 때 이메일 보내기
첫 번째 방법은 엑셀 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보다 큰지 확인합니다.
- 마지막으로, 조건이 충족되면 Send_Email_Condition_Cell_Value_Change라는 Sub 프로시저가 실행됩니다.

- 마지막으로 창을 저장하고 닫습니다.
이제 모듈(Module) 창에 코드를 입력해야 합니다. VBA 모듈 창을 여는 방법은 다음과 같습니다.
- 먼저 개발 도구(Developer) 탭 >>> Visual Basic을 선택합니다.
또는 ALT + F11 키를 눌러 VBA 창을 바로 열 수도 있습니다.

- 다음으로 삽입(Insert) >>> 모듈(Module)을 선택합니다.

이 창에 아래 코드를 입력합니다.
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 코드 해설
- 첫째, Send_Email_Condition_Cell_Value_Change라는 Sub 프로시저를 호출합니다.
- 둘째, 필요한 변수 유형을 선언합니다.
- 셋째, 메일 응용 프로그램으로 Outlook을 선택합니다.
- 그다음, 코드 안에 이메일 본문 내용을 작성합니다.
- 마지막으로 ".Display"를 사용해 이메일 창을 화면에 표시합니다. 따라서 사용자가 직접 보내기(Send) 버튼을 눌러야 이메일이 발송됩니다. 반면 ".Send"를 사용하면 화면 표시 없이 즉시 이메일을 전송할 수 있습니다.

- 이후 모듈을 저장하고 닫습니다.
이제 데이터셋에서 699를 입력하면 아무 일도 일어나지 않습니다.

하지만 801(700 초과)을 입력하면 코드가 실행됩니다.

그러면 Outlook 이메일 작성 창이 나타나며, 보내기(Send)를 눌러 해당 주소로 이메일을 전송할 수 있습니다.

추가로 읽으면 좋은 글: 엑셀 목록에서 이메일 보내는 방법(효과적인 2가지 방법)
2. VBA를 활용해 여러 조건이 동시에 충족될 때 이메일 보내기
두 번째 방법에서는 데이터셋을 변경했습니다. 이번에는 여러 조건이 동시에 충족될 때 이메일을 발송하는 방법입니다. 하나의 모듈 안에 2개의 Sub 프로시저를 사용합니다. 코드가 정상적으로 작동하면 2명에게 이메일이 전송되며, 이메일에 파일도 첨부됩니다.

단계별 진행 방법:
- 먼저 첫 번째 방법과 동일하게 모듈 창을 연 뒤 아래 코드를 입력합니다.
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행부터 마지막 행까지 범위를 설정했습니다.
- 그다음, 두 번째 Sub 프로시저인 Send_Email_With_Multiple_Condition을 호출합니다.
- 이후 메일 응용 프로그램으로 Outlook을 선택합니다.
- 코드 안에 이메일 내용을 설정합니다.
- 여기서는 첨부(Attachment) 기능을 사용해 엑셀 파일을 이메일에 첨부합니다.
- 마지막으로 ".Display"를 사용해 이메일 창을 표시합니다. 사용자가 직접 보내기(Send)를 눌러야 발송되며, ".Send"를 사용하면 표시 없이 바로 전송할 수 있습니다.

- 다음으로 모듈을 저장하고 닫습니다.
이제 코드를 실행하기 위해 매크로(Macro) 창을 엽니다.
- 먼저 개발 도구(Developer) 탭 >>> 매크로(Macros)를 선택합니다.

매크로 창이 나타납니다.
- 다음으로 "Send_Email_Condition"을 선택합니다.
- 마지막으로 실행(Run)을 누릅니다.

코드가 실행되며, 조건을 충족한 사람이 2명이므로 이메일 작성 창 2개가 나타납니다.

추가로 읽으면 좋은 글: 엑셀에서 조건 충족 시 자동으로 이메일 보내는 방법
함께 읽으면 좋은 글
- 엑셀에서 통합 문서 공유 기능 활성화하는 방법
- 엑셀과 Outlook을 활용한 대량 이메일 전송 방법(3가지)
- 본문을 포함해 엑셀에서 이메일을 보내는 매크로(유용한 사례 3가지)
- 첨부파일과 함께 엑셀에서 이메일을 보내는 매크로 적용 방법
- 엑셀 파일을 온라인에서 공유하는 방법(간단한 2가지 방법)
3. 날짜 조건에 따라 엑셀에서 이메일 보내기
마지막 방법은 마감일이 현재 날짜로부터 일주일 이내일 경우 이메일을 발송하는 것입니다. 이 글을 작성한 날짜는 2022년 5월 19일이므로, 7일 이내에 해당하는 행은 5행 한 곳뿐입니다. VBA 코드를 사용해 해당 인원에게 이메일을 전송해 보겠습니다.

단계별 진행 방법:
- 먼저 첫 번째 방법과 동일하게 모듈 창을 연 뒤 아래 코드를 입력합니다.
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 코드 해설
- 첫째, Send_Email_Date_Condition이라는 Sub 프로시저를 호출합니다.
- 둘째, 필요한 변수 유형을 선언합니다.
- 셋째, InputBox를 사용해 값의 범위를 지정받습니다.
- 이후 메일 응용 프로그램으로 Outlook을 선택합니다.
- 그다음 VBA CDate 함수를 사용해 해당 날짜가 현재 날짜로부터 7일 이내인지 확인합니다.
- 코드 안에 이메일 내용을 설정합니다.
- 마지막으로 ".Display"를 사용해 이메일 창을 표시합니다. 직접 보내기(Send)를 눌러야 발송되며, ".Send"를 사용하면 표시 없이 바로 전송할 수 있습니다.

- 다음으로 모듈을 저장하고 닫습니다.
- 그런 다음 두 번째 방법과 동일하게 매크로(Macro) 창을 엽니다.
- "Send_Email_Date_Condition"을 선택하고 실행(Run)을 누릅니다.

- 먼저 마감일 열(날짜 열)을 선택하고 확인(OK)을 누릅니다.

- 다음으로 이메일 열을 선택하고 확인(OK)을 누릅니다.

- 마지막으로 이메일 내용(제목) 열을 선택하고 확인(OK)을 누릅니다.

- 그러면 이메일 작성 창이 나타납니다. 보내기(Send)를 누르면 원하는 목표를 달성할 수 있습니다.

추가로 읽으면 좋은 글: 날짜 기준으로 엑셀에서 자동으로 이메일 보내는 방법
알아두어야 할 사항
- 이 글의 모든 방법에서 Outlook을 기본 메일 응용 프로그램으로 사용했습니다. 다른 메일 프로그램을 사용하려면 별도의 코드가 필요할 수 있습니다.
연습 섹션
각 방법별로 연습용 데이터셋을 엑셀 파일에 함께 준비해 두었습니다.

결론
지금까지 엑셀에서 조건이 충족될 때 이메일을 전송하는 3가지 방법을 알아보았습니다. 끝까지 읽어주셔서 감사합니다. 앞으로도 엑셀 실력 향상을 응원합니다!
관련 글
- 매크로를 활용해 본문을 포함한 엑셀 이메일 전송 방법(쉬운 단계별 가이드)
- 엑셀에서 Outlook으로 자동 이메일 전송하는 방법(4가지)
- 셀 내용에 따라 엑셀에서 자동으로 이메일 보내는 방법(2가지)
- 엑셀 파일을 이메일로 자동 전송하는 방법(실용적인 3가지 방법)
- VBA를 사용해 엑셀 워크시트에서 자동 알림 이메일 보내기
- 공유된 엑셀 파일에서 접속자 확인하는 방법(빠른 단계별 가이드)