이 글에서는 날짜를 기준으로 엑셀(Excel)에서 이메일을 자동으로 전송하는 가장 효과적인 방법들을 소개합니다. 일반적으로 아웃룩(Outlook)이나 Gmail에서 이메일을 보내는 것은 쉽지만, 특정 시간이나 날짜에 맞춰 이메일을 보내야 한다면 마이크로소프트 엑셀을 매우 유용하게 활용할 수 있습니다.
예제 데이터에는 여러 개의 이메일 주소가 포함되어 있습니다. 모든 주소는 더미 데이터이며, admin@wsxdn.com(필자의 실제 주소)만 실제로 사용했습니다. 직접 받은편지함에서 결과를 확인해 드리기 위함입니다.

날짜 기준으로 엑셀에서 이메일을 자동 발송하는 3가지 방법
1. 엑셀 VBA로 지정한 날짜에 이메일 자동 발송하기
VBA(Visual Basic for Applications)를 사용하면 날짜 조건에 따라 이메일을 자동으로 보낼 수 있습니다. 수신자별로 이메일을 발송할 날짜 목록을 만들어 두면 됩니다. 아래 과정을 순서대로 따라 해 보세요. 이번 섹션에서는 오늘 날짜와 일치하는 경우에만 발송하도록 구현합니다.
실행 단계:
- 먼저 리본 메뉴에서 개발 도구(Developer) >> Visual Basic을 클릭합니다.

- VBA 편집기 창이 열리면 삽입(Insert) >> 모듈(Module)을 선택합니다.
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 타입입니다.
- Range_Select는 메시지 박스(InputBox)를 통해 셀 범위를 선택받도록 설정됩니다.
- 그다음 VBA IF문에서 Value(셀 값)로 오늘 날짜와 일치하는지 판단하고, Subject, Email_From, Email_To 값을 입력받습니다.
- 수신 주소(Email_To)가 비어 있으면 프로시저가 종료됩니다. 그렇지 않으면 추가 변수들을 새 IF문 안에서 처리합니다. Cc와 Bcc는 각각 참조(Carbon Copy)와 숨은 참조(Blind Carbon Copy)를 의미합니다.
- 이후 Outlook 응용 프로그램 객체를 생성해 Email_Obj에 할당하고, Single_Mail을 통해 메일 항목을 만듭니다.
- 마지막으로 With 문 안에서 Subject, Email_To, Cc, Bcc, Email_Text를 이메일의 필수 요소로 정의하고 .Send 명령으로 발송합니다.
- 이제 워크시트로 돌아가 현재 매크로 이름인 SendEmail01 매크로를 실행합니다.

- 매크로를 실행하면 날짜 범위를 선택하라는 메시지 박스가 나타납니다. 범위를 지정하고 확인(OK)을 클릭하세요.

- 다음으로 제목 입력 창이 뜨면 제목을 입력하고 확인을 누릅니다.

- 이후 이메일 발송에 필요한 정보를 차례로 묻는 메시지 박스가 연달아 나타납니다. 아래 이미지를 참고해 진행하세요.
- 발신자 이메일 주소를 입력합니다.

- 수신할 이메일 주소를 입력합니다.

- 참조(CC) 수신자의 주소를 입력합니다.

- 필요하다면 숨은 참조(BCC) 수신자도 입력합니다. 여기서는 생략했습니다.

- 본문 내용을 입력합니다.

- 마지막 메시지 박스 이후 Microsoft Outlook 경고창이 나타나면 허용(Allow)을 클릭합니다.

이 작업을 마치면 입력한 주소들로 이메일이 전송됩니다.
아래는 실제 수신된 본 이메일입니다.

그리고 아래는 참조(CC)로 발송된 사본입니다.

이처럼 엑셀에서 날짜 조건에 맞춰 이메일을 자동으로 보낼 수 있습니다.
더 읽어보기: Excel Macro to Send Email Automatically (3 Suitable Examples)
2. 미래 날짜(예정일)를 기준으로 이메일 자동 발송하기
이번 섹션에서는 오늘 이후의 미래 날짜를 기준으로 이메일을 발송하는 방법을 알아봅니다. 예를 들어 어떤 행사 3일 전 또는 7일 전에 미리 알림 메일을 보내고 싶다면 이 방법이 유용합니다.
실행 단계:
- 먼저 섹션 1을 참고해 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(줄바꿈 문자), Email_Body, Date_Range_Value, Send_Value, Subject는 String 타입입니다.
- Date_Range를 InputBox로 설정해 날짜 범위를 선택받고, 선택하지 않으면 IF문으로 프로시저를 종료합니다.
- Mail_Recipient와 Email_Text 역시 InputBox로 입력받습니다.
- 그다음 Outlook 응용 프로그램 객체를 생성해 Outlook_App_Create에 할당합니다.
- 여기서 날짜 간격이 적용됩니다. 이 코드에서는 7일로 설정되어 있습니다. 예를 들어 오늘이 5월 19일이고, 5월 20일부터 26일 사이에 있는 일정에 대해 미리 알림을 보내고 싶다면 해당 기간의 날짜가 있는 행의 수신자에게만 이메일이 전달됩니다. 그 외 날짜는 발송되지 않습니다.
- 이후 Email_Body를 HTML 형식으로 꾸미는 명령어를 넣고, With 문으로 이메일의 필수 요소들을 정의합니다.
- 여기서는 .Display 명령을 사용했기 때문에 Outlook에서 이메일 초안이 열리고, 발송 전에 내용을 확인할 수 있습니다. 초안 확인 없이 바로 보내려면 .Send 명령을 사용하세요. 단, 두 명령을 동시에 사용해서는 안 됩니다.
- 이제 워크시트로 돌아가 SendEmail02 매크로를 실행합니다.

- 매크로 실행 후 날짜 범위를 선택하라는 메시지 박스가 나타나면 범위를 지정하고 확인을 클릭합니다.

- 다음으로 이메일 주소 범위를 선택하라는 메시지 박스가 뜹니다. 범위를 지정하고 확인을 누릅니다.

- 마지막으로 본문 텍스트 범위를 선택하고 확인을 클릭합니다.

- 5월 21일부터 24일까지 해당하는 이메일 초안이 생성된 것을 확인할 수 있습니다. 예제에서 admin@wsxdn.com은 실제 이메일 주소이므로, 실제로 메일이 도착하는 모습을 보여드리기 위해 이 주소로 발송했습니다. 필요하다면 참조(CC) 수신자도 추가할 수 있습니다.

- 실제 받은 메일함을 확인해 보세요. 경우에 따라 스팸함에 들어갈 수도 있으니 모든 폴더를 확인하는 것이 좋습니다.

이렇게 하면 미래 날짜를 기준으로 이메일을 자동 발송할 수 있습니다.
더 읽어보기: Send Reminder Email Automatically from an Excel Worksheet Using VBA
관련 글 추천
- How to See Who Is in a Shared Excel File (With Quick Steps)
- Enable Share Workbook in Excel
- How to Share Excel File for Multiple Users
- Send Bulk Email from Outlook Using Excel (3 Ways)
- How to Apply Macro to Send Email from Excel with Attachment
3. 특정 날짜에 단일 주소로 이메일 자동 발송하기
특정 날짜가 되었을 때 하나의 주소로 이메일을 자동 발송하는 것도 가능합니다. 발송하고 싶은 날짜 목록을 미리 만들어 두면 됩니다. 아래 과정을 통해 자세히 살펴보겠습니다.
실행 단계:
- 먼저 섹션 1을 참고해 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문에서 셀 값이 오늘 날짜와 일치하는지 확인하고, Subject, Send_From, Send_To, Cc, Bcc, Body를 String 타입으로 선언합니다. 또한 Email_Obj와 Single_Mail은 Variant 타입으로 설정합니다.
- 각 변수에 제목, 발신 주소, 수신 주소, 참조, 숨은 참조의 텍스트 값을 지정합니다.
- 이후 Outlook 응용 프로그램 객체를 생성해 Email_Obj에 할당하고, Single_Mail로 메일 항목을 만듭니다.
- 마지막으로 With 문 안에서 Subject, Send_To, Cc, Bcc, Body를 이메일의 필수 요소로 정의하고 .Send 명령으로 발송합니다.
- 이제 워크시트로 돌아가 매크로를 실행합니다.

- 실행 중 Microsoft Outlook 경고창이 나타나면 허용(Allow)을 클릭합니다.

이 작업을 마치면 코드에 지정된 주소로 이메일이 전송됩니다.
아래는 실제 수신된 본 이메일입니다.

그리고 아래는 참조(CC)로 발송된 사본입니다.

이처럼 엑셀에서 특정 날짜 조건에 따라 단일 주소로 이메일을 자동 발송할 수 있습니다.
더 읽어보기: How to Send Email Automatically When Condition Met in Excel
연습 섹션
이 섹션에서는 이 글에서 사용한 데이터 세트를 제공하니, 직접 연습해 보시기 바랍니다.
주의 사항
이 글의 VBA 코드를 실행하려면 항상 Outlook 계정에 로그인된 상태여야 합니다. 로그인되어 있지 않으면 메일이 정상적으로 발송되지 않으니 반드시 확인하세요.
결론
지금까지 엑셀에서 날짜를 기준으로 이메일을 자동 발송하는 다양하고 효과적인 방법을 배웠습니다. 더 좋은 아이디어나 피드백이 있다면 댓글로 공유해 주세요. 앞으로 더 좋은 글을 작성하는 데 큰 도움이 됩니다.
관련 글
- [Solved]: Share Workbook Not Showing in Excel (with Easy Steps)
- How to Send Email from Excel List (2 Effective Ways)
- How to Send an Editable Excel Spreadsheet by Email (3 Quick Methods)
- Macro to Send Email from Excel (5 Suitable Examples)
- Macro to Send Email from Excel with Body (3 Useful Cases)
- Excel Macro: Send Email to an Address in Cell (2 Easy Ways)
