โดยทั่วไปการส่งอีเมลครั้งละ 5 ถึง 10 คนสามารถทำได้ การส่งอีเมลถึงคน 30, 50 หรือ 500 คนด้วยชื่อ วันที่ ข้อเสนอ การเตือนความจำ หรือบันทึกติดตามผลที่แตกต่างกันเล็กน้อยคือจุดที่กระบวนการช้าและเกิดข้อผิดพลาดได้ง่าย นั่นคือจุดที่ Excel และ VBA กลายเป็นการผสมผสานที่ทรงพลัง ด้วยแผ่นงานที่มีโครงสร้างที่ดีและรหัส VBA คุณสามารถเปลี่ยนแถวสเปรดชีตให้เป็นอีเมล Outlook ส่วนบุคคล พร้อมด้วยหัวเรื่องที่กำหนดเอง ข้อความเนื้อหา และไฟล์แนบเสริม
ในบทช่วยสอนนี้ เราจะแสดงวิธีสร้าง Excel Email Generator โดยใช้ VBA เพื่อสร้างข้อความ Outlook ส่วนบุคคลจากแถวสเปรดชีต เป้าหมายคือทำให้อีเมล 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
- คลิก ตกลง .

ข้อมูลอ้างอิงนี้ให้สิทธิ์ VBA เข้าถึงโมเดลออบเจ็กต์แบบเต็มของ Outlook รวมถึงรายการเมล ไฟล์แนบ และโฟลเดอร์ อย่างไรก็ตาม ตัวอย่างโค้ดในบทช่วยสอนนี้ใช้ การเชื่อมโยงล่าช้า ด้วย CreateObject(“Outlook.Application”) ดังนั้นการตั้งค่าการอ้างอิง Outlook จึงเป็นทางเลือกสำหรับโค้ดที่แสดงที่นี่
หมายเหตุด้านความปลอดภัย: อีเมลอัตโนมัติสามารถกระตุ้นการแจ้งเตือนความปลอดภัยของ Outlook ในสภาพแวดล้อมต่างๆ ลักษณะการทำงานนี้ขึ้นอยู่กับการตั้งค่าความปลอดภัยของ Outlook และนโยบายองค์กร ทดสอบมาโครของคุณในสภาพแวดล้อมที่ปลอดภัยก่อนใช้กับผู้รับจริงเสมอ
ขั้นตอนที่ 4:การเขียนโค้ด VBA เพื่อสร้างอีเมล Outlook ส่วนบุคคล
- ไปที่นักพัฒนาซอฟต์แวร์ แท็บ>> เลือก 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 และวนซ้ำแต่ละแถวที่ใช้ในแผ่นงาน โดยจะอ่านค่าต่างๆ เช่น ชื่อ อีเมล หัวเรื่อง รหัสคำสั่งซื้อ และจำนวน จากนั้นจะสร้างหัวเรื่องและเนื้อหาเฉพาะตัวโดยใช้ค่าเหล่านั้นโดยตรง สุดท้าย มันสามารถแสดงอีเมล บันทึกเป็นฉบับร่างพร้อมการแก้ไขเล็กน้อย หรือส่งก็ได้ สำหรับเวิร์กโฟลว์ธุรกิจส่วนใหญ่ เริ่มต้นด้วย .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") สร้างอินสแตนซ์ Outlook โดยใช้การเชื่อมโยงล่าช้า ซึ่งมีความยืดหยุ่นมากกว่าใน Office เวอร์ชันต่างๆ
- วนซ้ำผ่านแถว: มาโครค้นหาแถวสุดท้ายแบบไดนามิกและวนซ้ำจากแถว 2 เพื่อข้ามส่วนหัว
- การปรับเปลี่ยนเทมเพลตในแบบของคุณ: แทนที่ ฟังก์ชันจะสลับตัวยึดตำแหน่ง เช่น {Name} ด้วยข้อมูลเฉพาะแถว นี่คือแกนหลักของระบบเทมเพลตที่ขับเคลื่อนด้วย VBA เพิ่มแทนที่เพิ่มเติม บรรทัดสำหรับฟิลด์เพิ่มเติม
- การสร้างอีเมล: ใช้ .HTMLBody สำหรับการจัดรูปแบบที่หลากหลาย เช่น ข้อความตัวหนาและลิงก์ หากเทมเพลตของคุณเป็นข้อความธรรมดา ให้ใช้ .Body แทน.
- กำลังส่ง: .ส่ง ส่งข้อความโดยอัตโนมัติในขณะที่ .Display เปิดเพื่อตรวจสอบซึ่งมีประโยชน์ในระหว่างการทดสอบ
- การจัดการข้อผิดพลาด: ตัวอย่างได้แก่ การจัดการข้อผิดพลาดพื้นฐานและการข้ามแถวที่มีที่อยู่อีเมลหายไป ในการใช้งานจริง คุณอาจต้องการเพิ่มการบันทึกและการตรวจสอบโดยละเอียดเพิ่มเติม
ขั้นตอนที่ 6:การทดสอบและการเรียกใช้มาโคร
- บันทึกสมุดงานของคุณเป็น .xlsm ไฟล์
- กรอกข้อมูลตัวอย่าง ใช้ที่อยู่อีเมลของคุณเองในการทดสอบเพื่อหลีกเลี่ยงการส่งข้อความที่ไม่ต้องการ
- กำหนดมาโครให้กับปุ่มหรือไปที่ นักพัฒนาซอฟต์แวร์ แท็บ>> เลือก มาโคร .
- เลือก ส่งอีเมลส่วนบุคคล หรือ SendPersonalizedEmails_Template>> คลิก เรียกใช้ .

- Outlook อาจแจ้งขออนุญาต หากเป็นเช่นนั้น ให้อนุญาตการเข้าถึงหลังจากยืนยันการตั้งค่าการทดสอบของคุณแล้วเท่านั้น
- ตรวจสอบข้อความที่แสดงหรือโฟลเดอร์รายการที่ถูกส่งของคุณใน Outlook ขึ้นอยู่กับว่าคุณใช้ .Display หรือ .ส่ง .

เคล็ดลับการทดสอบ: เริ่มต้นด้วย .จอแสดงผล แทน .ส่ง เพื่อให้คุณสามารถดูตัวอย่างอีเมลได้โดยไม่ต้องส่ง
การปรับแต่งเทมเพลตขั้นสูง
- ตัวยึดตำแหน่งหลายรายการ: หากคุณมีคอลัมน์เพิ่มเติม เช่น วันที่ครบกำหนด ให้เพิ่มตัวแปร เช่น dueDate =ws.Cells(i, 6).Value และใช้ body =แทนที่(body, “{DueDate}”, DueDate) .
- เนื้อหาที่มีเงื่อนไข: ใช้ ถ้า คำสั่งสำหรับส่วนไดนามิก:
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 สามารถจำกัดการเข้าถึงทางโปรแกรมได้ การตั้งค่านี้ควบคุมโดย Outlook และการตั้งค่าความปลอดภัยขององค์กร ไม่ใช่เฉพาะการตั้งค่ามาโครของ Excel
- ข้อผิดพลาดในการส่ง: เพิ่มการจัดการข้อผิดพลาด เช่น:
On Error GoTo ErrorHandler ' ... code ... ErrorHandler: MsgBox "Error: " & Err.Description
- ประสิทธิภาพ: สำหรับรายการอีเมลจำนวนมาก คุณสามารถเพิ่มการหน่วงเวลาสั้นๆ ระหว่างข้อความได้:
Application.Wait Now + TimeValue("00:00:01")
- ปัญหาการแสดงผล HTML: ทดสอบเทมเพลตอย่างระมัดระวังและตรวจดูให้แน่ใจว่าตัวยึดตำแหน่งไม่รบกวนโครงสร้าง HTML
การตั้งค่านี้ปรับขนาดได้ดีสำหรับการส่งข้อความส่วนตัวจำนวนมาก คุณสามารถขยายเพิ่มเติมได้โดยการเพิ่มไฟล์แนบ บันทึกอีเมลที่ส่งกลับไปยัง Excel หรือจัดเก็บเทมเพลตหลายรายการสำหรับสถานการณ์ที่แตกต่างกัน
บทสรุป
เมื่อทำตามขั้นตอนเหล่านี้ คุณจะสามารถสร้าง Excel Email Generator ที่ใช้ VBA เพื่อสร้างข้อความ Outlook ส่วนบุคคลจากแถวสเปรดชีตได้ นี่เป็นตัวอย่างเชิงปฏิบัติของวิธีที่ VBA สามารถเปลี่ยนเวิร์กชีตให้เป็นเครื่องมืออีเมลอัตโนมัติขนาดเล็กได้อย่างไร แทนที่จะเขียนข้อความ Outlook ซ้ำๆ ด้วยมือ คุณสามารถสร้างเทมเพลตที่ใช้ซ้ำได้และให้ Excel กรอกรายละเอียดส่วนบุคคลจากแต่ละแถว นั่นทำให้กระบวนการเร็วขึ้น สม่ำเสมอยิ่งขึ้น และปรับขนาดได้ง่ายขึ้น เมื่อคุณสร้างเวอร์ชันพื้นฐานแล้ว คุณสามารถขยายด้วยการจัดรูปแบบ HTML, เทมเพลตหลายรายการ, ตรรกะแบบมีเงื่อนไข, การจัดการไฟล์แนบ และการติดตามสถานะ เพื่อสร้างระบบอีเมลส่วนบุคคลที่สมบูรณ์
รับแบบฝึกหัด Excel ขั้นสูงพร้อมโซลูชันฟรี!