한 번에 5~10명에게 이메일을 보내는 것은 일반적으로 관리 가능합니다. 약간 다른 이름, 날짜, 제안, 알림 또는 후속 메모를 30, 50 또는 500명에게 이메일로 보내는 경우 프로세스가 느려지고 오류가 발생하기 쉽습니다. Excel과 VBA가 강력한 조합이 되는 곳이 바로 여기입니다. 잘 구성된 워크시트와 VBA 코드를 사용하면 스프레드시트 행을 사용자 정의 제목 줄, 본문 텍스트 및 선택적 첨부 파일이 포함된 개인화된 Outlook 이메일로 바꿀 수 있습니다.
이 튜토리얼에서는 VBA를 사용하여 스프레드시트 행에서 개인화된 Outlook 메시지를 생성함으로써 Excel 이메일 생성기를 구축하는 방법을 보여줍니다. 목표는 각 행에 저장된 데이터를 기반으로 개인화된 Outlook 이메일을 자동화하는 것입니다.
1단계:Excel 스프레드시트 설정
VBA가 쉽게 읽을 수 있도록 데이터를 구조화하십시오. 2행에서 시작하고 1행을 머리글로 사용하는 다음 열이 있는 "데이터"라는 간단한 워크시트를 가정하겠습니다.
다음과 같은 워크시트를 만드세요:

이러한 열은 사용 사례에 맞게 조정될 수 있지만 제목을 명확하고 일관되게 유지하세요.
2단계:이메일 템플릿 디자인
VBA 코드를 작성하기 전에 이메일의 모양을 결정하세요.
다음은 간단한 주문 확인 템플릿입니다:
주제 템플릿:
Your Order Confirmation - #{OrderID}
본문 템플릿:
<p>Dear {Name},</p>
<p>Thank you for your recent purchase!</p>
<p>We are happy to confirm your order details:</p>
<ul>
<li><strong>Order ID:</strong> {OrderID}</li>
<li><strong>Total Amount:</strong> {Amount}</li>
</ul>
<p>Your order is now being processed and should ship within 2–3 business days.</p>
<p>If you have any questions, feel free to reply to this email.</p>
<p>Best regards,<br>
Shamima<br>
Customer Support Team<br>
Your Company Name<br>
Phone: +880-XXX-XXXXXXX</p>
- 중괄호 안의 자리 표시자는 각 Excel 행에서 가져온 값입니다.
- VBA에서는 해당 자리 표시자를 실제 셀 값으로 대체합니다.
템플릿이 복잡한 경우 별도의 워크시트에 저장하거나 파일에서 읽을 수 있습니다. 단순화를 위해 셀에 저장하겠습니다.

3단계:Outlook 참조 이해
코드를 작성하기 전에 Excel이 Outlook의 개체 라이브러리에 연결하는 방법을 이해하는 것이 도움이 됩니다.
- VBA 편집기를 엽니다.
- 개발자로 이동 탭>> Visual Basic 선택 또는 Alt + F11을 누르세요. .
- 도구로 이동 메뉴>> 참조 선택 .
- 아래로 스크롤하여 “Microsoft Outlook XX.X 개체 라이브러리”를 확인합니다. 초기 바인딩 및 Outlook 관련 개체 유형을 사용하려는 경우
- 확인을 클릭하세요. .

이 참조는 메일 항목, 첨부 파일 및 폴더를 포함하여 Outlook의 전체 개체 모델에 대한 VBA 액세스를 제공합니다. 하지만 이 튜토리얼의 코드 예시에서는 후기 바인딩을 사용합니다. CreateObject(“Outlook.Application”) 사용 이므로 여기에 표시된 코드에 대한 Outlook 참조 설정은 선택 사항입니다.
보안 참고사항: 이메일을 자동화하면 Outlook 보안 프롬프트가 나타날 수 있습니다. 많은 환경에서 이 동작은 Outlook 보안 설정 및 조직 정책에 따라 달라집니다. 실제 수신자에게 매크로를 사용하기 전에 항상 안전한 환경에서 테스트해 보세요.
4단계:개인화된 Outlook 이메일을 생성하기 위한 VBA 코드 작성
- 개발자로 이동 탭>> Visual Basic 선택 .
- 삽입으로 이동 메뉴>> 모듈 선택 .
- VBA 코드를 새 모듈에 붙여넣으세요.
- 이 스크립트는 행을 반복하며 Outlook을 통해 이메일을 생성합니다.
VBA 코드:
Sub SendPersonalizedEmails()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim subject As String
Dim body As String
Dim recipient As String
Dim customerName As String
Dim orderID As String
Dim amount As String
On Error GoTo ErrorHandler
Set OutlookApp = CreateObject("Outlook.Application")
Set ws = ThisWorkbook.Sheets("Data") ' Change sheet name if different
' Find last row (based on column A - Email)
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
recipient = Trim(ws.Cells(i, 1).Value) ' Email
customerName = Trim(ws.Cells(i, 2).Value) ' Name
subject = Trim(ws.Cells(i, 3).Value) ' Subject
orderID = Trim(ws.Cells(i, 4).Value) ' OrderID
amount = Trim(ws.Cells(i, 5).Value) ' Amount
' Skip row if no valid email
If recipient = "" Or InStr(recipient, "@") = 0 Then GoTo NextRow
' Personalize subject
subject = Replace(subject, "#{OrderID}", orderID)
' Build body directly from cell values
body = "Dear " & customerName & "," & vbCrLf & vbCrLf & _
"Thank you for your order." & vbCrLf & vbCrLf & _
"Here are your order details:" & vbCrLf & _
"Order ID: " & orderID & vbCrLf & _
"Amount: " & amount & vbCrLf & vbCrLf & _
"We appreciate your business and will contact you if any further action is needed." & vbCrLf & vbCrLf & _
"Best regards," & vbCrLf & _
"Customer Support Team"
' Create & send email
Set OutlookMail = OutlookApp.CreateItem(0) ' olMailItem
With OutlookMail
.To = recipient
.Subject = subject
.Body = body
.Display ' Shows the email so you can review it manually
'.Send ' Uncomment when you're ready to send automatically
End With
Set OutlookMail = Nothing
NextRow:
Next i
MsgBox "All emails processed. Check Outlook for the displayed messages.", vbInformation
CleanUp:
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Exit Sub
ErrorHandler:
MsgBox "An error occurred: " & Err.Description, vbCritical
Resume CleanUp
End Sub

이 VBA 코드는 Outlook에 연결하고 워크시트에서 사용된 각 행을 반복합니다. 이름, 이메일, 제목, 주문 ID, 금액 등의 값을 읽습니다. 그런 다음 해당 값을 직접 사용하여 개인화된 주제와 본문을 구축합니다. 마지막으로 이메일을 표시하거나 약간 수정하여 초안으로 저장하거나 보낼 수 있습니다. 대부분의 비즈니스 워크플로에서는 .Display로 시작합니다. 각 메시지를 보내기 전에 검토할 수 있기 때문에 가장 좋습니다.
5단계:메시지를 재사용 가능한 템플릿 시스템으로 전환
하나의 이메일 본문을 하드코딩하는 것은 가능하지만 보다 유연한 Excel 이메일 생성기는 워크시트 내부에 템플릿을 저장합니다. 이메일 템플릿용 셀을 추가한 다음 기본 템플릿을 해당 셀에 텍스트로 붙여넣습니다. 동적 교체를 위해 중괄호 안에 자리 표시자를 사용하세요:
- 다른 모듈에 코드 삽입 .
VBA 코드:
Sub SendPersonalizedEmails_Template()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim emailTemplate As String
Dim subject As String
Dim body As String
Dim recipient As String
Dim customerName As String
Dim orderID As String
Dim amount As String
On Error GoTo ErrorHandler
Set OutlookApp = CreateObject("Outlook.Application")
Set ws = ThisWorkbook.Sheets("Data") ' Change sheet name if different
' Find last row (based on column A - Email)
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' Get template from cell F2 (adjust cell reference if you placed it elsewhere)
emailTemplate = ws.Range("F2").Value
If emailTemplate = "" Then
MsgBox "Email template is empty. Please add it to cell F2.", vbExclamation
Exit Sub
End If
For i = 2 To lastRow
recipient = Trim(ws.Cells(i, 1).Value)
customerName = Trim(ws.Cells(i, 2).Value)
subject = Trim(ws.Cells(i, 3).Value)
orderID = Trim(ws.Cells(i, 4).Value)
amount = Trim(ws.Cells(i, 5).Value)
' Skip row if no valid email
If recipient = "" Or InStr(recipient, "@") = 0 Then GoTo NextRow
' Personalize subject
subject = Replace(subject, "#{OrderID}", orderID)
' Personalize body
body = emailTemplate
body = Replace(body, "{Name}", customerName)
body = Replace(body, "{OrderID}", orderID)
body = Replace(body, "{Amount}", amount)
' Add more Replace() lines for other placeholders if needed
' Create & send email
Set OutlookMail = OutlookApp.CreateItem(0) ' olMailItem
With OutlookMail
.To = recipient
.Subject = subject
.HTMLBody = body
'.CC = "[email protected]"
'.Attachments.Add "C:\Invoices\" & orderID & ".pdf" ' Optional
.Display ' Shows the email so you can review it manually
'.Send ' Uncomment when you're ready to send automatically
End With
Set OutlookMail = Nothing
NextRow:
Next i
MsgBox "All emails processed. Check Outlook for the displayed messages.", vbInformation
CleanUp:
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Exit Sub
ErrorHandler:
MsgBox "An error occurred: " & Err.Description, vbCritical
Resume CleanUp
End Sub
- 실행을 클릭하세요. 템플릿 이메일을 미리 보려면 아이콘을 클릭하세요.

키 코드 설명:
- Outlook 설정: CreateObject(“Outlook.Application”) Office 버전 전반에 걸쳐 더 유연한 런타임 바인딩을 사용하여 Outlook 인스턴스를 생성합니다.
- 행 반복: 매크로는 마지막 행을 동적으로 찾고 행 2부터 반복하여 헤더를 건너뜁니다.
- 템플릿 맞춤설정: 교체 함수는 {Name}과 같은 자리 표시자를 바꿉니다. 행별 데이터를 사용합니다. 이것이 VBA 기반 템플릿 시스템의 핵심입니다. 바꾸기 더 추가 추가 입력란에 대한 줄입니다.
- 이메일 생성: .HTMLBody를 사용하세요. 굵은 텍스트 및 링크와 같은 풍부한 서식을 지정합니다. 템플릿이 일반 텍스트인 경우 .Body를 사용하세요. 대신.
- 보내는 중: .보내기 .Display 동안 자동으로 메시지를 보냅니다. 검토를 위해 엽니다. 이는 테스트 중에 유용합니다.
- 오류 처리: 예제에는 기본 오류 처리 및 이메일 주소가 누락된 행 건너뛰기가 포함됩니다. 프로덕션 환경에서는 로깅과 보다 자세한 유효성 검사를 추가할 수 있습니다.
6단계:매크로 테스트 및 실행
- 통합문서를 .xlsm으로 저장하세요. 파일.
- 샘플 데이터를 입력합니다. 원치 않는 메시지를 보내는 것을 방지하려면 자신의 이메일 주소를 사용하여 테스트하세요.
- 버튼에 매크로를 할당하거나 개발자로 이동하세요. 탭>> 매크로 선택 .
- 개인화된 이메일 보내기를 선택합니다. 또는 SendPersonalizedEmails_Template>> 실행을 클릭하세요. .

- Outlook에서 권한을 요청하는 메시지가 표시될 수 있습니다. 그렇다면 테스트 설정을 확인한 후에만 액세스를 허용하세요.
- .Display 사용 여부에 따라 Outlook에 표시된 메시지 또는 보낸 편지함 폴더를 확인하세요. 또는 .보내기 .

테스트 팁: .Display로 시작 .보내기 대신 이메일을 보내지 않고도 미리 볼 수 있습니다.
고급 템플릿 사용자 정의
- 여러 자리 표시자: 마감일과 같은 열이 더 많은 경우 dueDate =ws.Cells(i, 6).Value와 같은 변수를 추가하세요. body =바꾸기(body, “{DueDate}”, DueDate)를 사용하세요. .
- 조건부 콘텐츠: If를 사용하세요. 동적 섹션에 대한 명령문:
If customField = "VIP" Then body = body & "<p>Exclusive offer for you!</p>" End If
- 파일의 템플릿: 템플릿을 셀에 저장하는 대신 텍스트나 HTML 파일에서 읽어보세요.
Dim filePath As String filePath = "C:\Template.html" Open filePath For Input As #1 emailTemplate = Input$(LOF(1), 1) Close #1
- HTML 개선:
와 같은 이미지나 링크를 템플릿에 삽입할 수 있습니다. 또는 여기를 클릭하세요
, {Link}를 교체합니다. 동적으로.
일반적인 문제 해결
- Outlook을 찾을 수 없음: Outlook이 시스템에 설치되어 있는지 확인하세요.
- 보안 프롬프트: Outlook에서는 프로그래밍 방식의 액세스를 제한할 수 있습니다. 이는 Excel 매크로 설정뿐만 아니라 Outlook 및 조직 보안 설정에 의해 제어됩니다.
- 전송 오류: 다음과 같은 오류 처리를 추가하세요:
On Error GoTo ErrorHandler ' ... code ... ErrorHandler: MsgBox "Error: " & Err.Description
- 성능: 이메일 목록이 큰 경우 메시지 사이에 짧은 지연 시간을 추가할 수 있습니다.
Application.Wait Now + TimeValue("00:00:01")
- HTML 렌더링 문제: 템플릿을 주의 깊게 테스트하고 자리표시자가 HTML 구조를 방해하지 않는지 확인하세요.
이 설정은 대량 개인화된 메시징에 적합하게 확장됩니다. 첨부 파일을 추가하거나, 보낸 이메일을 다시 Excel에 기록하거나, 다양한 시나리오에 맞게 여러 템플릿을 저장하여 기능을 더욱 확장할 수 있습니다.
결론
다음 단계를 수행하면 VBA를 사용하여 스프레드시트 행에서 개인화된 Outlook 메시지를 생성하는 Excel 이메일 생성기를 구축할 수 있습니다. 이것은 VBA가 워크시트를 가벼운 이메일 자동화 도구로 바꾸는 방법에 대한 실제적인 예입니다. 반복적인 Outlook 메시지를 직접 작성하는 대신 재사용 가능한 템플릿을 만들고 Excel에서 각 행의 개인화된 세부 정보를 채울 수 있습니다. 이를 통해 프로세스가 더욱 빠르고 일관되며 확장이 쉬워집니다. 기본 버전을 구축한 후에는 HTML 형식, 다중 템플릿, 조건부 논리, 첨부 파일 처리 및 상태 추적을 통해 확장하여 완전한 개인화된 이메일 시스템을 만들 수 있습니다.
솔루션이 포함된 무료 고급 Excel 연습을 받아보세요!