Tìm cách mail merge trong Excel không dùng Word? Đây là nơi đúng. Nếu Microsoft Word không khả dụng, mail merge sẽ khó khăn. Tuy nhiên, không phải không thể, vì Word không bắt buộc cho mail merge. Bài viết trình bày 2 VBA Macros để mail merge trong Excel không cần Word.
Mail Merge (Hợp nhất thư)
Khi cá nhân/công ty muốn gửi lượng lớn email với sửa đổi nhỏ (tên, email người nhận, địa chỉ). Bên liên quan tạo mẫu và các trường chỉnh sửa để đáp ứng. Ta gọi mẫu này là mail merge.
Đây là cách tiết kiệm thời gian lớn. Thường làm qua bộ soạn thảo Word (như Microsoft Word, Google Docs, v.v.). WordStar đầu tiên giới thiệu tính năng này đầu thập niên 80. Sau đó người khác áp dụng tính năng siêu hữu ích này.
Thông thường cần làm 5 bước chính của mail merge:
- Thứ nhất, tài liệu gốc (original document).
- Thứ hai, nguồn dữ liệu (data source).
- Thứ ba, các trường (fields) nhập liệu.
- Thứ tư, hợp nhất (merging) với tài liệu gốc.
- Thứ năm, Lưu (Save) hoặc Gửi (Send) email.
2 Cách tiện lợi Mail Merge trong Excel không dùng Word
Vì Microsoft Word là bộ soạn thảo Word nổi bật nhất, hầu hết chúng ta liên tưởng Word khi nghe “mail merge”. Tuy nhiên, chúng ta làm khác, chỉ dùng Microsoft Excel để mail merge. Đọc bài để hiểu sâu hơn.
Hơn nữa, dùng 2 tập dữ liệu minh họa cho Macros. Tập đầu có cột: “Tên”, “Địa chỉ Email”, “Thành phố”, “Địa chỉ đường”. Tập sau sẽ thấy ở phương pháp 2. Ngoài ra, vì lý do riêng tư, đã tạo 3 địa chỉ email giả cho tập dữ liệu, cái cuối thuộc tác giả bài viết, dùng để xác minh gửi email không vấn đề.

1. Mail Merge gửi email tự động trong Excel
Phương pháp 1, tên Worksheet là “VBA1”. Chèn mã VBA với hai Sub procedures dùng một Module để mail merge trong Excel không Word. Chạy mã, tự động gửi email đến khách hàng theo mẫu định sẵn. Trước đó, xem cách mở cửa sổ Module và gõ mã VBA.

Các bước:
- Từ tab Developer >>> chọn Visual Basic.
- Hoặc nhấn ALT + F11 mở cửa sổ VBA.

- Từ Insert >>> chọn Module.

- Cửa sổ Module hiện ra, gõ mã VBA.
- Nhập mã sau vào cửa sổ Module:
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

Giải thích mã VBA
- Gọi Sub procedure đầu “Mail_Merge_Only_Excel”.
- Khai báo kiểu biến, đặt “VBA1” làm Worksheet.
- Tìm số dòng cuối. Dữ liệu bắt đầu dòng 5, nên code từ dòng 5 đến dòng cuối.
- Gọi Sub procedure thứ hai “Mail_Merge_Only_Excel_Send_Mail”.
- Chọn Outlook làm Ứng dụng Mail.
- Nội dung email thiết lập trong mã. Dùng vbNewLine xuống dòng.
- Dùng “.Send” gửi email tự động, không cần bấm Send thủ công. Có thể dùng “.Display” chỉ hiển thị email không gửi.
- Lưu Module.
- Đặt con trỏ trong Sub procedure đầu, nhấn Run.
- Nếu chưa đăng nhập Outlook, sẽ yêu cầu nhập thông tin. Đã đăng nhập nên mail gửi ngay không thêm bước.

- Ảnh chụp cho thấy mail merge hoạt động đúng, dùng Excel không Word.

Xem thêm: Cách Mail Merge từ Excel sang Outlook (Các bước dễ dàng)
2. Mail Merge từ lựa chọn trong Excel không dùng Word
Phương pháp cuối, thay đổi tập dữ liệu một chút. Có 3 cột: “Tên”, “Địa chỉ Email”, “Nội dung”. Dùng mã VBA khác mail merge chỉ trong Excel. Lần này dùng phương pháp InputBox chọn cột email và nội dung gửi. Chỉ hiển thị (Display) thao tác mail merge trên Outlook Application và gửi thủ công bằng nút bấm. Nội dung email giống nhau cho tất cả khách hàng. Bắt đầu ngay.

Các bước:
- Như phương pháp 1, mở cửa sổ Module gõ mã này.
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

Giải thích mã VBA
- Gọi Sub procedure Mail_Merge_Without_Word_Input_Box.
- Khai báo kiểu biến.
- Dùng hai InputBox lấy địa chỉ email và nội dung email.
- Đếm số dòng.
- Dùng vòng lặp For Next Loop duyệt từng dòng lần lượt, dùng thuộc tính VBA Offset lấy tên khách hàng từ cột bên trái 1 cột.
- Dùng phương thức Display xem trước email. Thay vào đó có thể dùng Send để gửi.
- Lưu Module.
- Đặt con trỏ trong Sub procedure đầu, nhấn Run.

- Mã thực thi, yêu cầu chọn cột email và nội dung email.
- Chọn phạm vi C5:C8 làm địa chỉ email, nhấn OK.

- Chọn nội dung email ở ô D5, nhấn OK.

- 4 cửa sổ Outlook Application hiện ra.

- Nhấn Send chuyển tiếp email.

- Đây là kết quả mail merge thành công dùng mã VBA này.

Xem thêm: Cách Mail Merge từ Excel sang Outlook với file đính kèm (2 ví dụ)
Phần thực hành
Đã thêm tập dữ liệu thực hành cho mỗi phương pháp trong file Excel. Làm theo dễ dàng.

Kết luận
Đã trình bày 2 VBA Macros để mail merge trong Excel không Word. Nếu gặp vấn đề hoặc có góp ý, hãy bình luận. Truy cập ExcelDemy đọc thêm bài Excel. Cảm ơn đã đọc, hãy tiếp tục xuất sắc!
Bài viết liên quan
- Macro điền tài liệu Mail Merge từ Excel
- Cách đổi định dạng ngày trong Excel Mail Merge (Các bước nhanh)
- Cách gộp file Excel vào nhãn thư từ (Các bước dễ dàng)
- Mail Merge từ Excel sang phong bì Word (2 phương pháp dễ dàng)
- Cách Mail Merge hình ảnh từ Excel sang Word (2 cách dễ dàng)