Computer >> 컴퓨터 >  >> 소프트웨어 >> Office

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

자동 이메일 발송 기능을 활용하면 누구에게나 적합한 표준화된 메시지를 미리 설계해 두고 필요할 때마다 전달할 수 있어, 수작업 없이 시간을 크게 절약할 수 있습니다. 특정 시점에 메일을 발송할 수 있다는 점에서 이메일 자동화는 잠재 고객과 지속적으로 소통하는 데 매우 효과적인 방법입니다. 그중에서도 가장 가치 있는 기능은 올바른 사람에게 올바른 시점에 알림 메일을 보낼 수 있다는 것입니다. 이 글에서는 조건이 충족될 때 자동으로 이메일을 발송하는 다양한 엑셀 VBA 매크로를 소개합니다.

아래 예제 파일을 내려받아 직접 따라 해보실 수도 있습니다.

엑셀에서 조건 충족 시 자동으로 이메일을 보내는 3가지 방법

고객에게 조건이 충족될 때마다 이메일을 보내야 하는 경우가 자주 있습니다. VBA 매크로를 사용하면 메일 발송 기능을 원하는 대로 커스터마이징할 수 있고, 한 번에 여러 명에게 동시에 메일을 보내는 것도 가능합니다. 매크로로 자동 메일을 보내려면 컴퓨터에 Outlook(아웃룩)이 미리 설치되어 있어야 하며, 작성하는 코드는 Outlook을 통해 수신자에게 메일을 전송하게 됩니다.

1. 셀 값에 따라 자동으로 이메일을 보내는 엑셀 VBA 매크로

데이터 집합의 특정 열 값을 기준으로 자동으로 이메일을 발송하는 엑셀 VBA 매크로를 만들어 보겠습니다. 아래 데이터 집합은 슈퍼마켓 고객 정보 예제로, B열에는 고객 이름, C열에는 이메일 주소, D열에는 상품 구매 미수금이 들어 있습니다. 고객에게 미수금 납부를 요청하는 메일을 보내고 싶지만, D5 셀 값이 10보다 클 때만 메일을 발송한다는 조건을 적용하려 합니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

실행 단계:

  • 먼저 리본 메뉴에서 개발 도구(Developer) 탭으로 이동합니다.
  • 코드(Code) 그룹에서 Visual Basic을 클릭해 VBA 편집기(Visual Basic Editor)를 엽니다. 또는 Alt + F11 키를 눌러도 됩니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

  • 또는 워크시트 탭을 마우스 오른쪽 버튼으로 클릭하고 코드 보기(View Code)를 선택해도 VBA 편집기가 열립니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

  • VBA 편집기가 열리면 아래의 VBA 코드를 복사하여 붙여넣습니다.

VBA 코드:

Dim r As Range
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set r = Intersect(Range("D5"), Target)
If r Is Nothing Then Exit Sub
If IsNumeric(Target.Value) And Target.Value > 10 Then
Call Send_Mail_Automatically1
End If
End Sub
Sub Send_Mail_Automatically1()
Dim ob1 As Object
Dim ob2 As Object
Dim str As String
Set ob1 = CreateObject("Outlook.Application")
Set ob2 = ob1.CreateItem(0)
str = "Hello!" & vbNewLine & vbNewLine & "To prevent further costs," _
& vbNewLine & "please pay before the deadline."
On Error Resume Next
With ob2
.To = Range("C5").Value
.cc = ""
.BCC = ""
.Subject = "Request to Pay Bill"
.Body = str
.Send
End With
On Error GoTo 0
Set ob2 = Nothing
Set ob1 = Nothing
End Sub
  • 이후 Run Sub(F5) 버튼을 클릭하거나 F5 키를 눌러 코드를 실행합니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

  • 매크로(Macros) 대화상자가 나타나면 해당 매크로를 선택하고 실행(Run) 버튼을 클릭합니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

  • 이제 Outlook 받은 편지함을 열어보면 엑셀의 VBA 매크로를 통해 방금 발송한 메일을 확인할 수 있습니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

VBA 코드 설명

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Su
Set r = Intersect(Range("D5"), Target)
If r Is Nothing Then Exit Sub
If IsNumeric(Target.Value) And Target.Value > 10 Then
Call Send_Mail_Automatically1
End If
End Sub

이 코드는 Private Sub로 선언했습니다. 매크로 창에서 직접 실행하지 않고, 워크시트 변경(Worksheet Change) 이벤트와 함께 사용하기 때문입니다. 즉, 셀 값이 변경되면 코드가 자동으로 실행됩니다. 먼저 대상 셀 개수를 하나(D5)로 제한한 뒤, 그 값이 10보다 큰지 확인하고, 조건이 충족되면 Send_Email_Automatically1 서브 프로시저를 호출해 메일을 발송합니다.

Sub Send_Mail_Automatically1()
Dim ob1 As Object
Dim ob2 As Object
Dim str As String
Set ob1 = CreateObject("Outlook.Application")
Set ob2 = ob1.CreateItem(0)
str = "Hello!" & vbNewLine & vbNewLine & "To prevent further costs," & vbNewLine & "please pay before the deadline."
On Error Resume Next
With ob2
.To = Range("C5").Value
.cc = ""
.BCC = ""
.Subject = "Request to Pay Bill"
.Body = str
.Send

여기서는 Send_Email_Automatically1 서브 프로시저를 사용합니다. 변수 유형을 선언한 뒤, 메일 클라이언트로 Outlook을 지정합니다. str 변수에는 이메일 본문 내용이 담기고, 수신자는 고객 이메일이 저장된 C5 셀 값으로 설정되며, 제목은 .Subject에 입력합니다. 마지막으로 .Send를 통해 메일을 발송합니다.

더 읽어보기: 셀 내용에 따라 엑셀에서 자동으로 이메일 보내기 (2가지 방법)

2. VBA 코드로 결제 마감일 기준 자동 이메일 보내기

이번 방법에서는 결제 마감일이 다가올 때 자동으로 이메일을 발송하는 엑셀 VBA 매크로를 만들어 보겠습니다. 일종의 리마인더 역할을 하는 기능입니다. 예제 데이터에는 B열에 고객 이름, C열에 이메일 주소, D열에 발송할 메시지, E열에 결제 마감일이 포함되어 있습니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

실행 단계:

  • 먼저 리본 메뉴에서 개발 도구(Developer) 탭을 클릭합니다.
  • Visual Basic을 클릭해 VBA 편집기를 엽니다.
  • 또는 Alt + F11 키를 눌러도 됩니다.
  • 또는 시트를 마우스 오른쪽 버튼으로 클릭한 후 코드 보기(View Code)를 선택합니다.
  • VBA 창이 열리면 아래의 VBA 코드를 복사하여 붙여넣습니다.

VBA 코드:

Public Sub Send_Email_Automatically2()
    Dim rngD, rngS, rngT As Range
    Dim ob1, ob2 As Object
    Dim LRow, x As Long
    Dim l, strbody, rSendValue, mSub As String
    On Error Resume Next
    Set rngD = Application.InputBox("Deadline Range:", "Exceldemy", , , , , , 8)
    If rngD Is Nothing Then Exit Sub
    Set rngS = Application.InputBox("Email Range:", "Exceldemy", , , , , , 8)
    If rngS Is Nothing Then Exit Sub
    Set rngT = Application.InputBox("Email Topic Range:", "Exceldemy", , , , , , 8)
    If rngT Is Nothing Then Exit Sub
    LRow = rngD.Rows.Count
    Set rngD = rngD(1)
    Set rngS = rngS(1)
    Set rngT = rngT(1)
    Set ob1 = CreateObject("Outlook.Application")
    For x = 1 To LRow
        rngDValue = ""
        rngDValue = rngD.Offset(x - 1).Value
        If rngDValue <> "" Then
        If CDate(rngDValue) - Date <= 7 And CDate(rngDValue) - Date > 0 Then
            rngSValue = rngS.Offset(x - 1).Value
            mSub = rngT.Offset(x - 1).Value & " on " & rngDValue
            l = "<br><br>"
            strbody = "<HTML><BODY>"
            strbody = strbody & "Hello! " & rngSValue & l
            strbody = strbody & rngT.Offset(x - 1).Value & l
            strbody = strbody & "</BODY></HTML>"
            Set ob2 = ob1.CreateItem(0)
            With ob2
                .Subject = mSub
                .To = rSendValue
                .HTMLBody = strbody
                .Send
            End With
            Set ob2 = Nothing
        End If
    End If
    Next
    Set ob1 = Nothing
End Sub
  • F5 키를 누르거나 Run Sub 버튼을 클릭해 코드를 실행합니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

  • 마감일 열 범위를 선택한 후 확인(OK)을 클릭합니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

  • 같은 방식으로 이메일 열 범위를 선택하고 확인(OK)을 눌러 진행합니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

  • 그다음 메시지 열 범위를 선택하고 확인(OK)을 클릭합니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

  • 이제 각 이메일 주소로 메시지가 발송됩니다. Outlook 받은 편지함에서 결과를 확인할 수 있습니다.

VBA 코드 설명

Public Sub Send_Email_Automatically2()
    Dim rngD, rngS, rngT As Range
    Dim ob1, ob2 As Object
    Dim LRow, x As Long
    Dim l, strbody, rSendValue, mSub As String
    On Error Resume Next
    Set rngD = Application.InputBox("Deadline Range:", "Exceldemy", , , , , , 8)
    If rngD Is Nothing Then Exit Sub
    Set rngS = Application.InputBox("Email Range:", "Exceldemy", , , , , , 8)
    If rngS Is Nothing Then Exit Sub
    Set rngT = Application.InputBox("Email Topic Range:", "Exceldemy", , , , , , 8)
    If rngT Is Nothing Then Exit Sub
    LRow = rngD.Rows.Count
    Set rngD = rngD(1)
    Set rngS = rngS(1)
    Set rngT = rngT(1)
    Set ob1 = CreateObject("Outlook.Application")

이 프로시저의 이름은 Send_Email_Automatically2입니다. 먼저 변수 유형을 선언한 후, InputBox를 통해 마감일·이메일·메시지 각각의 범위를 사용자로부터 입력받습니다. 그리고 메일 클라이언트로 Outlook을 지정합니다.

 For x = 1 To LRow
        rngDValue = ""
        rngDValue = rngD.Offset(x - 1).Value
        If rngDValue <> "" Then
        If CDate(rngDValue) - Date <= 7 And CDate(rngDValue) - Date > 0 Then
            rngSValue = rngS.Offset(x - 1).Value
            mSub = rngT.Offset(x - 1).Value & " on " & rngDValue
            l = "<br><br>"
            strbody = "<HTML><BODY>"
            strbody = strbody & "Hello! " & rngSValue & l
            strbody = strbody & rngT.Offset(x - 1).Value & l
            strbody = strbody & "</BODY></HTML>"
            Set ob2 = ob1.CreateItem(0)
            With ob2
                .Subject = mSub
                .To = rSendValue
                .HTMLBody = strbody
                .Send

이후 VBA의 CDate 함수를 사용해 해당 날짜가 오늘로부터 7일 이내인지 확인합니다. 조건에 부합하면 이메일 본문을 HTML 형식으로 구성한 뒤, 마지막에 .Send로 메일을 발송합니다.

더 읽어보기: 날짜 기준으로 엑셀에서 자동으로 이메일 보내는 방법

관련 추천 글

  • 공유 엑셀 파일에서 누가 작업 중인지 확인하는 방법 (간단한 단계)
  • 엑셀에서 통합 문서 공유를 활성화하는 방법
  • VBA로 엑셀 워크시트에서 자동 리마인드 메일 보내기
  • 엑셀과 Outlook을 연동해 대량 이메일 보내는 방법 (3가지)
  • 첨부파일과 함께 엑셀에서 메일을 보내는 매크로 적용법

3. 여러 조건이 충족될 때 자동으로 이메일 보내기

세 번째 방법 역시 VBA 매크로를 사용하지만, 이번에는 여러 조건이 모두 충족될 때만 고객에게 메일이 발송되도록 구현합니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

실행 단계:

  • 먼저 리본 메뉴에서 개발 도구(Developer) 탭을 클릭합니다.
  • Visual Basic을 클릭해 VBA 편집기를 실행합니다.
  • 또는 Alt + F11 키를 눌러도 됩니다.
  • 또는 시트를 마우스 오른쪽 버튼으로 클릭하고 코드 보기(View Code)를 선택합니다.
  • VBA 창이 열리면 아래 코드를 입력합니다.

VBA 코드:

Sub Send_Email_Automatically3()
    Dim wrksht As Worksheet
    Dim add As String, mSub As String, N As String
    Dim eRow As Long, x As Long
    Set wrksht = ThisWorkbook.Sheets("Multiple Conditions")
    With wrksht
        eRow = .Cells(.Rows.Count, 5).End(xlUp).Row
        For x = 5 To eRow
            If .Cells(x, 4) >= 1 And .Cells(x, 5) = "Yes" Then
                add = .Cells(x, 3)
                mSub = "Request to Pay Bill"
                N = .Cells(x, 2)
                Call Multiple_Conditions(add, mSub, N)
            End If
        Next x
    End With
End Sub
Sub Multiple_Conditions(mAddress As String, mSubject As String, eName As String)
    Dim ob1 As Object
    Dim ob2 As Object
    Set ob1 = CreateObject("Outlook.Application")
    Set ob2 = ob1.CreateItem(0)
    With ob2
        .To = add
        .CC = ""
        .BCC = ""
        .Subject = mSub
        .Body = "Hello!" & N & ", To prevent further costs, please pay before the deadline."
        .Attachments.add ActiveWorkbook.FullName
        .Send
    End With
    Set pMail = Nothing
    Set pApp = Nothing
End Sub
  • 마지막으로 F5 키를 눌러 코드를 실행합니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

  • 매크로(Macros) 대화상자가 나타나면 해당 매크로를 선택한 후 실행(Run) 버튼을 클릭합니다.

엑셀에서 조건이 충족되면 자동으로 이메일을 보내는 3가지 방법 (VBA 매크로)

  • 앞선 방법들과 마찬가지로 Outlook을 열어 받은 편지함을 확인하면, 엑셀의 VBA 매크로로 발송된 메일을 볼 수 있습니다.

VBA 코드 설명

Sub Send_Email_Automatically3()
    Dim wrksht As Worksheet
    Dim add As String, mSub As String, N As String
    Dim eRow As Long, x As Long
    Set wrksht = ThisWorkbook.Sheets("Multiple Conditions")
    With wrksht
        eRow = .Cells(.Rows.Count, 5).End(xlUp).Row
        For x = 5 To eRow
            If .Cells(x, 4) >= 1 And .Cells(x, 5) = "Yes" Then
                add = .Cells(x, 3)
                mSub = "Request to Pay Bill"
                N = .Cells(x, 2)
                Call Multiple_Conditions(add, mSub, N)

여기서는 두 개의 프로시저를 사용합니다. 첫 번째 서브 프로시저의 이름은 Send_Email_Automatically3이며, 'Multiple Conditions' 시트를 지정하고 변수 유형을 선언합니다. 그다음 마지막 행 번호를 찾아내고, 값이 5행부터 시작하므로 반복문도 5행부터 끝까지 순회하도록 설정합니다.

Sub Multiple_Conditions(mAddress As String, mSubject As String, eName As String)
    Dim ob1 As Object
    Dim ob2 As Object
    Set ob1 = CreateObject("Outlook.Application")
    Set ob2 = ob1.CreateItem(0)
    With ob2
        .To = add
        .CC = ""
        .BCC = ""
        .Subject = mSub
        .Body = "Hello!" & N & ", To prevent further costs, please pay before the deadline."
        .Attachments.add ActiveWorkbook.FullName
        .Send

두 번째 서브 프로시저Multiple_Conditions를 호출합니다. 메일 클라이언트로 Outlook을 선택하고 이메일 본문을 설정합니다. Attachments 메서드를 사용해 현재 엑셀 파일을 메일에 첨부한 뒤, .Send로 메일을 발송합니다.

더 읽어보기: 엑셀에서 조건 충족 시 이메일을 보내는 방법 (3가지 쉬운 방법)

결론

지금까지 소개한 방법들을 활용하면 엑셀에서 조건이 충족될 때 자동으로 이메일을 발송할 수 있습니다. 도움이 되었기를 바랍니다! 궁금한 점이나 제안, 피드백이 있다면 댓글로 알려주세요. ExcelDemy.com 블로그의 다른 글들도 함께 확인해 보세요.

함께 읽으면 좋은 글

  • 엑셀에서 Outlook으로 자동 이메일을 보내는 방법 (4가지)
  • 매크로로 본문이 포함된 엑셀 이메일을 보내는 방법 (쉬운 단계별 가이드)
  • 엑셀 매크로: 셀에 있는 주소로 이메일 보내기 (2가지 쉬운 방법)
  • 엑셀 스프레드시트에서 여러 이메일을 보내는 방법 (2가지 쉬운 방법)
  • 본문과 함께 엑셀에서 메일을 보내는 매크로 (3가지 유용한 사례)
  • 편집 가능한 엑셀 스프레드시트를 이메일로 보내는 방법 (3가지 빠른 방법)