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

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

Microsoft Word 없이 Excel에서 편지 병합(Mail Merge)을 수행하는 방법을 찾고 계신가요? 그렇다면 이 글이 정답입니다. 여러 사정으로 Microsoft Word를 사용할 수 없는 상황이라면 편지 병합 작업이 까다롭게 느껴질 수 있습니다. 하지만 불가능한 일은 아닙니다. 편지 병합 작업에 Word는 반드시 필요하지 않기 때문입니다. 이번 글에서는 Word 없이 Excel에서 편지 병합을 수행할 수 있는 VBA 매크로 2가지를 소개해 드리겠습니다.

편지 병합(Mail Merge)이란?

개인이나 기업에서 이름, 수신자의 이메일 주소, 주소 등 약간의 내용만 달라지는 대량의 이메일을 발송해야 할 때가 있습니다. 이럴 때 관련 당사자는 템플릿과 편집 가능한 필드를 만들어 필요를 충족할 수 있는데, 이러한 템플릿을 우리는 편지 병합이라고 부릅니다.

편지 병합은 시간을 크게 절약해 주는 기능입니다. 일반적으로는 워드 프로세서(예: Microsoft Word, Google Docs 등)를 통해 이 작업을 수행하는 것이 보통입니다. 이 기능은 1980년대 초반 WordStar가 최초로 도입했으며, 이후 다른 프로그램들도 이 매우 유용한 기능을 채택하게 되었습니다.

일반적으로 편지 병합 작업에는 다음과 같은 5단계가 필요합니다:

  • 원본 문서 준비
  • 데이터 원본 확보
  • 입력할 필드 지정
  • 원본 문서와 데이터 병합
  • 마지막으로 이메일 저장 또는 발송

Word 없이 Excel에서 편지 병합하는 2가지 방법

Microsoft Word는 가장 널리 사용되는 워드 프로세서이기 때문에 대부분의 사람들은 "편지 병합"이라는 말을 들으면 Word를 떠올립니다. 하지만 이번 글에서는 조금 다르게 접근하여 Microsoft Excel만 사용해 편지 병합을 수행해 보겠습니다. 자세한 내용은 끝까지 읽어보세요.

또한 두 개의 데이터셋을 사용하여 매크로를 시연해 보겠습니다. 첫 번째 데이터셋은 "Name(이름)", "Email Address(이메일 주소)", "City(도시)", "Street Address(상세 주소)" 열로 구성되어 있습니다. 두 번째 데이터셋은 이 글의 두 번째 방법에서 확인하실 수 있습니다. 참고로 개인정보 보호를 위해 데이터셋의 이메일 주소 중 3개는 임의로 만든 것이며, 마지막 하나는 이 글의 작성자 소유로, 문제없이 이메일이 발송되는지 검증하는 데 사용됩니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

1. Excel에서 자동으로 이메일을 발송하는 편지 병합

첫 번째 방법에서는 워크시트 이름을 "VBA1"로 설정했습니다. 하나의 모듈(Module)에 두 개의 Sub 프로시저가 포함된 VBA 코드를 삽입하여 Word 없이 Excel에서 편지 병합을 수행합니다. 그런 다음 이 코드를 실행하면 미리 정의된 템플릿을 사용해 목록에 있는 고객들에게 이메일이 자동으로 발송됩니다. 본격적으로 시작하기 전에 모듈 창을 띄우고 VBA 코드를 입력하는 방법부터 살펴보겠습니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

실행 단계:

  • 먼저 개발 도구(Developer) 탭 >>> Visual Basic을 선택합니다.
    • 또는 ALT + F11 키를 눌러 VBA 창을 열 수도 있습니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

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

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

  • 그러면 VBA 코드를 입력할 수 있는 모듈 창이 열립니다.
  • 이제 모듈 창에 아래 코드를 입력합니다.
Option Explicit
Sub Mail_Merge_Only_Excel()
    Dim xSheet As Worksheet
    Dim mAddress As String, mSubject As String, eName As String, _
    eLocation As String, eCity As String
    Dim eRow As Long, x As Long
    Set xSheet = ThisWorkbook.Sheets("VBA1") 'WorkSheet Name
    With xSheet
        eRow = .Cells(.Rows.Count, 5).End(xlUp).Row
        For x = 5 To eRow 'Specific Row to Row to Last Row
                mAddress = .Cells(x, 3)
                mSubject = "Thank You for Your Loyalty"
                eName = .Cells(x, 2)
                eCity = .Cells(x, 4)
                eLocation = .Cells(x, 5)
                Call Mail_Merge_Only_Excel_Send_Mail(mAddress, mSubject, _
                eName, eLocation, eCity)
        Next x
    End With
End Sub
Sub Mail_Merge_Only_Excel_Send_Mail(mAddress As String, mSubject As String, _
eName As String, eLocation As String, eCity 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 & vbNewLine & eCity & vbNewLine & eLocation & _
        vbNewLine & vbNewLine & "Hello! " _
        & "You are one of the most precious customers to us for the last quarter. " _
        & "As a token of appreciation, we are sending you 20$ coupon code for your " _
        & "next purchase at ExcelDemy. " _
        & "Use the coupon code 'ExcelDemy20' to avail of this discount." _
        & vbNewLine & "From," & vbNewLine & "ExcelDemy Team"
        .Send
    End With
    Set pMail = Nothing
    Set pApp = Nothing
End Sub

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

VBA 코드 분석

  • 첫째, 첫 번째 Sub 프로시저인 "Mail_Merge_Only_Excel"을 호출합니다.
  • 둘째, 변수 타입을 선언하고 "VBA1"을 워크시트로 설정합니다.
  • 셋째, 마지막 행 번호를 찾습니다. 데이터 값이 5행부터 시작하므로 코드에서도 5행부터 마지막 행까지 범위를 지정했습니다.
  • 넷째, 두 번째 Sub 프로시저인 "Mail_Merge_Only_Excel_Send_Mail"을 호출합니다.
  • 다섯째, 메일 응용 프로그램으로 Outlook을 선택합니다.
  • 여섯째, 코드에 이메일 내용을 설정합니다. 또한 vbNewLine을 사용하여 이메일 본문에 빈 줄을 삽입합니다.
  • 마지막으로 ".Send"를 사용하여 이메일을 발송합니다. 따라서 이메일을 보내기 위해 보내기(Send) 버튼을 직접 누를 필요가 없습니다. 참고로 ".Display"를 사용하면 발송하지 않고 이메일 화면만 표시할 수 있습니다.
  • 이제 모듈을 저장합니다.
  • 커서를 첫 번째 Sub 프로시저 안에 놓고 실행(Run)을 누릅니다.
  • 아직 Outlook 메일 앱에 로그인하지 않았다면 로그인 정보를 입력하라는 요청이 표시됩니다. 이미 로그인되어 있다면 추가 단계 없이 바로 메일이 발송됩니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

  • 마지막으로 아래 스냅샷은 편지 병합이 의도대로 작동했으며, Word 없이 Excel만으로도 실행 가능함을 보여줍니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

더 읽기: Excel에서 Outlook으로 편지 병합하는 방법 (쉬운 단계별 가이드)

2. 선택 영역을 활용한 편지 병합 (Word 없이 Excel에서)

마지막 방법에서는 데이터셋을 조금 변경했습니다. "Name(이름)", "Email Address(이메일 주소)", "Text(텍스트)" 세 개의 열로 구성되어 있습니다. 이번에도 Excel에서만 편지 병합을 수행하는 또 다른 VBA 코드를 사용합니다. 이번에는 InputBox 메서드를 사용하여 이메일 주소와 발송할 텍스트를 선택합니다. 그리고 Outlook 응용 프로그램에 편지 병합 결과만 표시한 후, 버튼을 클릭해 수동으로 발송합니다. 이메일 본문은 모든 고객에게 동일하게 적용됩니다. 그럼 바로 단계로 넘어가겠습니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

실행 단계:

  • 먼저 첫 번째 방법에서와 같이 모듈 창을 열고 아래 코드를 입력합니다.
Public Sub Mail_Merge_Without_Word_Input_Box()
'Declare the variables
    Dim XRcptsEmail As Range
    Dim xMailContent As Range
    Dim xRngDn As Range
    Dim xCrtOut As Object
    Dim xValSendRng As String
    Dim k As Long
    Dim xMailSections As Object
    Dim xFinalRw As Long
    Dim CrVbLf As String
    Dim xMsg As String
    On Error Resume Next
    'Insert a input box for selecting the recipients
    Set XRcptsEmail = Application.InputBox("Choose the column for the email" _
    & "addresses of the recipients:", "ExcelDemy", , , , , , 8)
    If XRcptsEmail Is Nothing Then Exit Sub
    'To enter the text mail, insert a input box
    Set xMailContent = Application.InputBox("In your email," _
    & "choose the column with the text:", "ExcelDemy", , , , , , 8)
    If xMailContent Is Nothing Then Exit Sub
    'Count rows for the recipient email
    xFinalRw = XRcptsEmail.Rows.Count
    Set XRcptsEmail = XRcptsEmail(1)
    Set xMailContent = xMailContent(1)
    'Set command to open MS Outlook Application
    Set xCrtOut = CreateObject("Outlook.Application")
    'Apply For loop to conduct the operation in each row one by one
    For k = 1 To xFinalRw
            xValSendRng = Cells(XRcptsEmail.Offset(k - 1).Row, _
            XRcptsEmail.Offset(k - 1).Column - 1)
            'Create the subject, body and text contents with the required variables
            CrVbLf = "<br><br>"
            xMsg = "<HTML><BODY>"
            xMsg = xMsg & "Dear " & xValSendRng & CrVbLf
            xMsg = xMsg & "" & xMailContent.Value & CrVbLf
            xMsg = xMsg & "</BODY></HTML>"
            'Create the email
            Set xMailSections = xCrtOut.CreateItem(0)
            'Define the position to place the Subject, Body and Recipients Address
            With xMailSections
                .Subject = "Congratulations!!!"
                xValSendRng = Cells(XRcptsEmail.Offset(k - 1).Row, _
                XRcptsEmail.Offset(k - 1).Column)
                .To = xValSendRng
                .HTMLBody = xMsg
                .Display
            End With
            Set xMailSections = Nothing
    Next
    Set xCrtOut = Nothing
End Sub

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

VBA 코드 분석

  • 우선 Sub 프로시저 Mail_Merge_Without_Word_Input_Box를 호출합니다.
  • 둘째, 변수 타입을 선언합니다.
  • 셋째, 두 개의 InputBox를 사용하여 이메일 주소와 이메일 본문 내용을 입력받습니다.
  • 넷째, 행 수를 계산합니다.
  • 다섯째, For Next 루프를 사용하여 모든 행을 순차적으로 순회하며, VBA Offset 속성을 활용해 왼쪽 한 열에 있는 고객 이름을 추출합니다.
  • 마지막으로 Display 메서드를 사용하여 이메일을 미리 봅니다. 대신 Send 메서드를 사용하면 이메일을 즉시 발송할 수도 있습니다.
  • 이제 모듈을 저장합니다.
  • 커서를 첫 번째 Sub 프로시저 안에 놓고 실행(Run)을 누릅니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

  • 코드가 실행되면 이메일 주소와 이메일 내용을 선택하라는 요청이 표시됩니다.
  • 다음으로 이메일 주소가 있는 셀 범위 C5:C8을 선택하고 확인(OK)을 누릅니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

  • 그다음 셀 D5에 있는 이메일 내용을 선택하고 확인(OK)을 누릅니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

  • 그러면 Outlook 응용 프로그램4개가 표시됩니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

  • 마지막으로 보내기(Send)를 눌러 이메일을 발송합니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

  • 이것이 이 VBA 코드를 사용한 성공적인 편지 병합 결과물입니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

더 읽기: 첨부 파일과 함께 Excel에서 Outlook으로 편지 병합하는 방법 (예제 2가지)

연습 섹션

각 방법별 연습용 데이터셋을 Excel 파일에 포함해 두었습니다. 따라서 소개된 방법을 손쉽게 따라 해볼 수 있습니다.

Word 없이 Excel에서 편지 병합하기: VBA 매크로를 활용한 2가지 실용적인 방법

결론

지금까지 Word 없이 Excel에서 편지 병합을 수행하는 VBA 매크로 2가지를 소개했습니다. 이 방법들을 사용하면서 문제가 발생하거나 피드백이 있다면 언제든지 아래 댓글로 남겨주세요. 또한 더 많은 Excel 관련 팁이 궁금하시면 저희 사이트 ExcelDemy를 방문해 보세요. 읽어주셔서 감사합니다. 즐거운 엑셀 되세요!

관련 글

  • Excel에서 편지 병합 문서를 채우는 매크로
  • Excel 편지 병합에서 날짜 형식 변경하는 방법 (빠른 단계)
  • Excel 파일을 우편 라벨로 병합하는 방법 (쉬운 단계)
  • Excel에서 Word 봉투로 편지 병합하기 (2가지 쉬운 방법)
  • Excel에서 Word로 사진 편지 병합하는 방법 (2가지 쉬운 방법)