บ่อยครั้ง ผู้ใช้มีข้อมูลส่งจดหมายของลูกค้า 1-2 รายในไฟล์ Excel จึงต้องดึงข้อมูลอื่นๆ ที่ตรงกับข้อมูลเดิมในไฟล์ที่ใช้งานอยู่ ในกรณีนี้ จะพยายาม mail merge จาก Excel ไป Excel VBA Macro ของ Excel สามารถทำ mail merge ได้อย่างง่ายดาย
สมมติผู้ใช้ทำงานบน Excel Workbook ที่มีเพียงข้อมูลส่งจดหมายเดียว (เช่น Email Address) มีอีกไฟล์หนึ่ง ที่มีข้อมูลส่งจดหมายครบถ้วนสำหรับรายการใน Workbook ที่ใช้งานอยู่

บทความนี้สาธิต VBA Macro เพื่อ mail merge จาก Excel ไป Excel
ดาวน์โหลดสมุดงาน Excel
สมุดงานข้อมูลส่งจดหมายไม่ครบ
สมุดงานข้อมูลส่งจดหมายที่มีอยู่
VBA Macro สำหรับ Mail Merge จาก Excel ไป Excel
เนื่องจากต้อง merge ไฟล์ที่ใช้งานอยู่กับไฟล์ที่มีข้อมูลอยู่แล้ว ต้องใช้ VBA Macro code
ข้อมูลส่งจดหมายที่มีอยู่ใน Excel Workbook
สมมติข้อมูลส่งจดหมายที่มีอยู่ อาจเป็นดังภาพด้านล่าง ข้อมูลอาจมีหลายร้อยแถวและหลายสิบคอลัมน์ เพื่อการนำเสนอ ใช้ 2-3 แถว และไม่กี่คอลัมน์ ตั้งชื่อ Workbook นี้ว่า Mail_Data มีชีทเดียวชื่อ Mail Data

อ่านเพิ่มเติม: วิธี Mail Merge จาก Excel ไป Outlook พร้อมไฟล์แนบ (2 ตัวอย่าง)
ข้อมูลส่งจดหมายที่ต้องการในอีก Workbook
มี Excel Workbook อีกไฟล์ ที่มีเพียง 4 หรือ 5 ที่อยู่อีเมล ต้องการ merge กับ workbook ก่อนหน้า เพื่อเติมข้อมูลในเซลล์ว่างให้ครบอัตโนมัติ

อ่านเพิ่มเติม: วิธี Mail Merge จาก Excel ไป Outlook (ขั้นตอนง่ายๆ)
VBA Macro สำหรับ Mail Merge จาก Excel ไป Excel
เนื่องจากต้อง merge active workbook กับ workbook ที่มีอยู่ ต้องใช้ VBA Macro code
ขั้นตอนที่ 1: กด ALT+F11 หรือไป Developer > Visual Basic เปิด Microsoft Visual Basic window คลิก Insert > Module แทรก Module

ขั้นตอนที่ 2: วาง macro ต่อไปนี้ใน Module
Sub Mail_Merge_From_Excel_to_Excel()
Book1_Path = "C:\Users\maruf\Desktop\Softeko\Mail Merge from Excel to Excel\Mail_Data.xlsx"
Book1_Name = "Mail_Data"
Book2_Name = "Mail_Merge"
Sheet1_Name = "Mail Data"
Sheet2_Name = "Mail Merge"
No_of_Columns = 9
Workbooks.Open Book1_Path
Set Rng1 = Workbooks(Book1_Name).Worksheets(Sheet1_Name).UsedRange
Set Rng2 = Workbooks(Book2_Name).Worksheets(Sheet2_Name).UsedRange
For i = 1 To Rng2.Rows.Count
For j = 1 To Rng1.Rows.Count
If Rng1.Cells(j, No_of_Columns) = Rng2.Cells(i, No_of_Columns) Then
For k = 1 To No_of_Columns - 1
Rng2.Cells(i, k) = Rng1.Cells(j, k)
Next k
Exit For
End If
Next j
Next i
End Sub

➤ จากภาพ หมายเลขส่วนต่างๆ หมายถึง
1 – เริ่ม macro code ประกาศชื่อ Sub ของ VBA Macro Code
2 – กำหนด path ของ workbook ที่มีอยู่ในอุปกรณ์ กำหนดชื่อตัวแปรและหมายเลขคอลัมน์
3 – เปิด workbook ที่มีอยู่ด้วยคำสั่ง Workbooks.Open
4 – กำหนดช่วง (ranges) ให้ workbook และชีตต่างๆ
5 – รัน VBA FOR loop แบบ nested เพื่อ merge data เมื่อเงื่อนไขของ VBA IF statement ถูกต้อง
ขั้นตอนที่ 3: หลังใส่โค้ด ใช้ F5 หรือคลิก Run > Run Sub/UserForm รัน macro

🔺 ทันที Excel จะเปิด Mail_Data Workbook ที่ปิดอยู่

🔺 กลับไปที่ Merge_Data workbook ดูการเปลี่ยนแปลง จะเห็น Excel merge ข้อมูลส่งจดหมายของรายการที่มีอยู่ ตามที่ต้องการ

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