Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ซอฟต์แวร์ >> Office

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

มองหาวิธี 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 ที่อยู่อีเมล และอีกอันหนึ่งเป็นของผู้เขียน ใช้ทดสอบว่าส่งอีเมลได้โดยไม่มีปัญหา

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

1. Mail Merge เพื่อส่งอีเมลอัตโนมัติใน Excel

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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

ขั้นตอน:

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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

  • จะได้หน้าต่าง 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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

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 เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

อ่านเพิ่มเติม: วิธี 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 และส่งด้วยตนเองโดยกดปุ่ม เนื้อหาอีเมลเหมือนกันสำหรับทุกลูกค้า

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

ขั้นตอน:

  • ตามที่แสดงในวิธีแรก เปิด 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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

อ่านเพิ่มเติม: วิธี Mail Merge จาก Excel ไป Outlook พร้อมไฟล์แนบ (2 ตัวอย่าง)

ส่วนฝึกฝน

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

ทำ Mail Merge ใน Excel เพียงอย่างเดียว: 2 วิธี VBA ที่มีประสิทธิภาพ

สรุป

แสดง 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 วิธีง่ายๆ)