มองหาวิธี mail merge ใน Excel โดยไม่ใช้ Word? บทความนี้คือที่ถูกต้อง หาก Microsoft Word ไม่พร้อมใช้งาน การ mail merge จะซับซ้อน แต่ไม่ใช่สิ่งที่เป็นไปไม่ได้ เพราะ Word ไม่ได้เป็นข้อกำหนดสำหรับ mail merge ในบทความนี้ จะแสดง 2 VBA Macros เพื่อ mail merge ใน Excel โดยไม่ต้องใช้ Word
Mail Merge
เมื่อบุคคลหรือบริษัทต้องการส่งอีเมลจำนวนมากพร้อมการปรับเปลี่ยนเล็กน้อย (เช่น ชื่อ ที่อยู่อีเมล หรือที่อยู่ผู้รับ) พวกเขาสามารถสร้างเทมเพลตและฟิลด์ที่แก้ไขได้เพื่อตอบสนองความต้องการ เรารู้จักเทมเพลตแบบนี้ว่า mail merge
นี่คือการประหยัดเวลาอย่างมาก มักทำผ่าน word processor (เช่น Microsoft Word, Google Docs ฯลฯ) WordStar เป็นผู้นำเสนอฟีเจอร์นี้ครั้งแรกในช่วงต้น 80s หลังจากนั้น อื่นๆ ก็นำมาใช้ฟีเจอร์ที่มีประโยชน์มากนี้
โดยทั่วไป ต้องทำตาม 5 ขั้นตอนหลักของ mail merge:
- ขั้นแรก original document
- ขั้นที่สอง data source
- ขั้นที่สาม fields ที่ต้องการป้อน
- ขั้นที่สี่ merging กับ original document
- ขั้นสุดท้าย Save หรือ Send emails
2 วิธีสำหรับ Mail Merge ใน Excel โดยไม่ใช้ Word
เนื่องจาก Microsoft Word เป็น word processor ที่โดดเด่นที่สุด เราส่วนใหญ่เชื่อมโยง Word เมื่อได้ยิน " mail merge " อย่างไรก็ตาม เราจะทำแตกต่างออกไป ใช้ Microsoft Excel เพียงอย่างเดียว อ่านต่อเพื่อรายละเอียด
จะใช้ 2 ชุดข้อมูล สำหรับ Macro ชุดแรกมีคอลัมน์: "Name", "Email Address", "City", และ "Street Address" จะเห็นชุดที่สองในวิธีที่สอง นอกจากนี้ เพื่อเหตุผลความเป็นส่วนตัว เราสร้าง 3 ที่อยู่อีเมล และอีกอันหนึ่งเป็นของผู้เขียน ใช้ทดสอบว่าส่งอีเมลได้โดยไม่มีปัญหา

1. Mail Merge เพื่อส่งอีเมลอัตโนมัติใน Excel
สำหรับวิธีแรก Worksheet ชื่อ "VBA1" จะแทรก VBA code พร้อม 2 Sub procedures ใช้ Module เดียว เพื่อ mail merge ใน Excel โดยไม่ใช้ Word จากนั้นรันโค้ด จะส่งอีเมลอัตโนมัติไปยังลูกค้าตามรายการ โดยใช้เทมเพลตที่กำหนดไว้ ก่อนอื่น ให้ดูวิธีเปิดหน้าต่าง Module และพิมพ์ VBA code

ขั้นตอน:
- จากแท็บ Developer >>> เลือก Visual Basic
- หรือกด ALT + F11 เพื่อเปิดหน้าต่าง VBA

- จาก Insert >>> เลือก Module

- จะได้หน้าต่าง Module สำหรับพิมพ์ VBA code
- พิมพ์โค้ดต่อไปนี้ใน Module window
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

VBA Code Breakdown
- เรียก Sub procedure แรก "Mail_Merge_Only_Excel"
- ประกาศประเภทตัวแปร ตั้ง "VBA1" เป็น Worksheet
- หาหมายเลขแถวสุดท้าย ค่าเริ่มจากแถว 5 จึงใส่แถว 5 ถึงแถวสุดท้าย
- เรียก Sub procedure ที่สอง "Mail_Merge_Only_Excel_Send_Mail"
- เลือก Outlook เป็น Mail Application
- ตั้งค่าเนื้อหาอีเมลในโค้ด ใช้ vbNewLine สร้างบรรทัดว่าง
- ใช้ ".Send" ส่งอีเมลอัตโนมัติ ไม่ต้องกด Send เอง สามารถใช้ ".Display" แสดงอีเมลโดยไม่ส่งได้
- Save Module
- วางเคอร์เซอร์ใน Sub procedure แรก กด Run
- หากยังไม่ login Outlook mail app จะขอข้อมูล login เรา login ไปแล้ว จึงส่งเมลได้ทันที

- ภาพนี้แสดง mail merge ทำงานได้ตามต้องการ และใช้ได้ด้วย Excel โดยไม่ต้อง Word

อ่านเพิ่มเติม: วิธี Mail Merge จาก Excel ไป Outlook (ขั้นตอนง่ายๆ)
2. Mail Merge จาก Selection ใน Excel โดยไม่ใช้ Word
วิธีสุดท้าย เปลี่ยนชุดข้อมูลเล็กน้อย มี 3 คอลัมน์: "Name", "Email Address", และ "Text" ใช้ VBA code อีกตัว เพื่อ mail merge ใน Excel เท่านั้น ครั้งนี้ใช้ InputBox method เลือกที่อยู่อีเมลและข้อความที่จะส่ง จะแค่แสดง mail merge บน Outlook Application และส่งด้วยตนเองโดยกดปุ่ม เนื้อหาอีเมลเหมือนกันสำหรับทุกลูกค้า

ขั้นตอน:
- ตามที่แสดงในวิธีแรก เปิด Module window พิมพ์โค้ดนี้
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

VBA Code Breakdown
- เรียก Sub procedure Mail_Merge_Without_Word_Input_Box
- ประกาศประเภทตัวแปร
- ใช้ InputBox 2 ครั้ง รับที่อยู่อีเมลและเนื้อหาอีเมล
- นับจำนวนแถว
- ใช้ For Next Loop วนลูปทุกแถว ใช้ VBA Offset property ดึงชื่อลูกค้าจากคอลัมน์ซ้าย 1 คอลัมน์
- ใช้ Display method แสดงอีเมลตัวอย่าง สามารถใช้ Send method ส่งอีเมลได้
- Save Module
- วางเคอร์เซอร์ใน Sub procedure แรก กด Run

- โค้ดจะรัน และขอให้เลือกที่อยู่อีเมลและเนื้อหาอีเมล
- เลือกช่วง C5:C8 เป็นที่อยู่อีเมล กด OK

- เลือกเนื้อหาอีเมลที่เซลล์ D5 กด OK

- จะแสดงหน้าต่าง Outlook Application จำนวน 4 หน้าต่าง

- กด Send เพื่อส่งอีเมล

- นี่คือผลลัพธ์ mail merge ที่สำเร็จด้วย VBA code นี้

อ่านเพิ่มเติม: วิธี Mail Merge จาก Excel ไป Outlook พร้อมไฟล์แนบ (2 ตัวอย่าง)
ส่วนฝึกฝน
เพิ่มชุดข้อมูลฝึกฝนสำหรับแต่ละวิธีในไฟล์ Excel สามารถทำตามวิธีได้ง่าย

สรุป
แสดง 2 VBA Macros สำหรับ mail merge ใน Excel โดยไม่ใช้ Word หากเจอปัญหาหรือมีข้อเสนอแนะ ทิ้งความคิดเห็นได้เลย เยี่ยมชม ExcelDemy สำหรับบทความ Excel-related เพิ่มเติม ขอบคุณที่อ่าน ขอให้เก่งขึ้นไปเรื่อยๆ!
บทความที่เกี่ยวข้อง
- Macro to Populate a Mail Merge Document from Excel
- วิธีเปลี่ยนรูปแบบวันที่ใน Excel Mail Merge (ขั้นตอนเร็ว)
- วิธีรวมไฟล์ Excel เพื่อฉลากส่งจดหมาย (ขั้นตอนง่ายๆ)
- Mail Merge จาก Excel ไป Word Envelopes (2 วิธีง่ายๆ)
- วิธี Mail Merge รูปภาพจาก Excel ไป Word (2 วิธีง่ายๆ)