บ่อยครั้งเราต้อง ส่งอีเมล ให้ลูกค้าเมื่อ เงื่อนไข ถูกปฏิบัติตาม บทความนี้จะแนะนำ 3 วิธีในการ ส่งอีเมล หาก เงื่อนไข ตรงกัน ใน Excel เพื่อสาธิตวิธีการ เราเลือกชุดข้อมูลที่มี 3 คอลัมน์: "Name", "Email", และ "Payment Due"
3 วิธีส่งอีเมลหากเงื่อนไขตรงกันใน Excel
1. ใช้ VBA ส่งอีเมลเมื่อค่าเซลล์เปลี่ยนแปลงใน Excel
สำหรับวิธีแรก เราจะใช้โค้ด Excel VBA เพื่อ ส่งอีเมล เมื่อ เงื่อนไข ตรงกัน ก่อนอื่น จะเปิดหน้าต่าง VBA Module แล้วพิมพ์โค้ดและรันเพื่อ ส่งอีเมล ในกรณีนี้ เกณฑ์การรันโค้ดจะเป็นเมื่อค่าเซลล์เปลี่ยนแปลง
ขั้นตอน:
- คลิกขวาที่ชีต "Cell Value Change"
- เลือก View Code
- พิมพ์โค้ดนี้:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("D5"), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value > 700 Then
Call Send_Email_Condition_Cell_Value_Change
End If
End If
End Sub
การวิเคราะห์โค้ด VBA
ที่นี่เราใช้ Private Sub เพราะเราจะไม่รันโค้ดผ่านหน้าต่าง Macro โค้ดนี้จะรันเองเมื่อมีการเปลี่ยนแปลง ค่าเซลล์
- ใช้ Private Sub ที่ event เป็น Worksheet_Change
- จำกัดจำนวน เซลล์ ไว้ที่ 1 และเซลล์นั้นคือ D5
- ตรวจสอบว่าค่าเป็นตัวเลขและ มากกว่า 700
- หาก เงื่อนไข ตรงกัน Sub Procedure Send_Email_Condition_Cell_Value_Change จะทำงาน
- บันทึกและปิดหน้าต่างนี้
ตอนนี้ จะพิมพ์โค้ดในหน้าต่าง Module เปิด VBA Module โดย:
- จากแท็บ Developer >>> เลือก Visual Basic
หรือกด ALT + F11 เพื่อแสดงหน้าต่าง VBA
- จาก Insert >>> เลือก Module
ในหน้าต่างนี้ จะพิมพ์โค้ด:
- พิมพ์โค้ดต่อไปนี้:
Sub Send_Email_Condition_Cell_Value_Change()
Dim pApp As Object
Dim pMail As Object
Dim pBody As String
Set pApp = CreateObject("Outlook.Application")
Set pMail = pApp.CreateItem(0)
pBody = "Hello, " & Range("B5").Value & vbNewLine & _
"You've Payment Due." & vbNewLine & _
"Please Pay it to avoid extra fees."
On Error Resume Next
With pMail
.To = Range("C5").Value
.CC = ""
.BCC = ""
.Subject = "Request For Payment"
.Body = pBody
.Display ' สามารถใช้ .Send เพื่อส่งอีเมลโดยไม่แสดง
End With
On Error GoTo 0
Set pMail = Nothing
Set pApp = Nothing
End Sub
การวิเคราะห์โค้ด VBA
- เรียก Sub Procedure Send_Email_Condition_Cell_Value_Change
- ประกาศชนิด Variable
- เลือก Outlook เป็น Mail Application
- ตั้งค่าเนื้อหา อีเมล ในโค้ด
- ใช้ .Display เพื่อแสดง อีเมล ต้องกด Send เอง ถ้าใช้ .Send จะส่งอัตโนมัติ
- บันทึกและปิด Module
ในชุดข้อมูล ลองพิมพ์ 699 ไม่มีอะไรเกิดขึ้น
แต่ถ้าพิมพ์ 801 (มากกว่า 700) โค้ดจะทำงาน
ตัวเลือก Outlook email จะแสดง กด Send เพื่อส่งอีเมล
อ่านเพิ่มเติม: วิธีส่งอีเมลจากรายการ Excel (2 วิธีที่มีประสิทธิภาพ)
2. ใช้ VBA ส่งอีเมลเมื่อเงื่อนไขหลายอย่างตรงกัน
สำหรับวิธีที่สอง เราเปลี่ยนชุดข้อมูล จะ ส่งอีเมล เมื่อ เงื่อนไขหลายอย่าง ตรงกัน ในวิธีนี้ จะใช้ 2 Sub Procedures ใน Module เดียว หากโค้ดทำงานตามที่ตั้งใจ เราจะ ส่งอีเมล ให้ 2 คน และแนบไฟล์ไปกับ อีเมล
ขั้นตอน:
- เปิดหน้าต่าง Module (เหมือนวิธีแรก) และพิมพ์โค้ดนี้:
Option Explicit
Sub Send_Email_Condition()
Dim xSheet As Worksheet
Dim mAddress As String, mSubject As String, eName As String
Dim eRow As Long, x As Long
Set xSheet = ThisWorkbook.Sheets("Conditions")
With xSheet
eRow = .Cells(.Rows.Count, 5).End(xlUp).Row
For x = 5 To eRow
If .Cells(x, 4) >= 1 And .Cells(x, 5) = "Yes" Then
mAddress = .Cells(x, 3)
mSubject = "Request For Payment"
eName = .Cells(x, 2)
Call Send_Email_With_Multiple_Condition(mAddress, mSubject, eName)
End If
Next x
End With
End Sub
Sub Send_Email_With_Multiple_Condition(mAddress As String, mSubject As String, eName 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 & ", Please pay it within the next week."
.Attachments.Add ActiveWorkbook.FullName ' ส่งไฟล์ผ่านอีเมล
.Display ' สามารถใช้ .Send ได้เช่นกัน
End With
Set pMail = Nothing
Set pApp = Nothing
End Sub
การวิเคราะห์โค้ด VBA
- เรียก Sub Procedure แรก Send_Email_Condition
- ประกาศชนิด Variable และตั้ง "Conditions" เป็น Sheet
- หาหมายเลข แถวสุดท้าย (Last Row) ข้อมูลเริ่มจาก แถว 5 จึงใส่ แถว 5 ถึงแถวสุดท้าย
- เรียก Sub Procedure ที่สอง Send_Email_With_Multiple_Condition
- เลือก Outlook เป็น Mail Application
- ตั้งค่าเนื้อหา อีเมล ในโค้ด
- แนบไฟล์ Excel ด้วย Attachment method
- ใช้ .Display แสดง อีเมล ต้องกด Send เอง ใช้ .Send ส่งอัตโนมัติ
- บันทึกและปิด Module
เปิดหน้าต่าง Macro เพื่อรันโค้ด:
- จากแท็บ Developer >>> เลือก Macros
- เลือก "Send_Email_Condition"
- กด Run
โค้ดจะทำงาน มี 2 คน ตรง เงื่อนไข จึงเห็นหน้าต่าง อีเมล 2 หน้าต่าง
อ่านเพิ่มเติม: วิธีส่งอีเมลอัตโนมัติเมื่อเงื่อนไขตรงกันใน Excel
บทความคล้ายกัน
- วิธีเปิดใช้งาน Share Workbook ใน Excel
- วิธีส่งอีเมลจำนวนมากจาก Outlook ด้วย Excel (3 วิธี)
- Macro ส่งอีเมลจาก Excel พร้อมเนื้อหา (3 กรณีที่มีประโยชน์)
- วิธีใช้ Macro ส่งอีเมลจาก Excel พร้อมไฟล์แนบ
- วิธีแชร์ไฟล์ Excel ออนไลน์ (2 วิธีง่ายๆ)
3. ส่งอีเมลใน Excel ตามเงื่อนไขวันที่
สำหรับวิธีสุดท้าย เราจะ ส่งอีเมล หากวันครบกำหนดอยู่ภายในหนึ่งสัปดาห์จากวันที่ปัจจุบัน วันนี้คือ 19 พฤษภาคม 2022 ขณะเขียนบทความ มีเพียง แถว 5 ที่อยู่ในช่วง 7 วัน เราจะ ส่งอีเมล ให้คนนั้นโดยใช้โค้ด VBA
ขั้นตอน:
- เปิดหน้าต่าง Module (เหมือนวิธีแรก) และพิมพ์โค้ดนี้:
Public Sub Send_Email_Date_Condition()
Dim rDate, rSend, rText As Range
Dim pApp, pItem As Object
Dim LRow, x As Long
Dim lineBreak, pBody, rSendValue, mSubject As String
On Error Resume Next
Set rDate = Application.InputBox("Select Deadline Range:", "Exceldemy", , , , , , 8)
If rDate Is Nothing Then Exit Sub
Set rSend = Application.InputBox("Select Email Range:", "Exceldemy", , , , , , 8)
If rSend Is Nothing Then Exit Sub
Set rText = Application.InputBox("Select Email Topic Range:", "Exceldemy", , , , , , 8)
If rText Is Nothing Then Exit Sub
LRow = rDate.Rows.Count
Set rDate = rDate(1)
Set rSend = rSend(1)
Set rText = rText(1)
Set pApp = CreateObject("Outlook.Application")
For x = 1 To LRow
rDateValue = ""
rDateValue = rDate.Offset(x - 1).Value
If rDateValue <> "" Then
If CDate(rDateValue) - Date <= 7 And CDate(rDateValue) - Date > 0 Then
rSendValue = rSend.Offset(x - 1).Value
mSubject = rText.Offset(x - 1).Value & " on " & rDateValue
lineBreak = "
"
pBody = ""
pBody = pBody & "Dear " & rSendValue & lineBreak
pBody = pBody & rText.Offset(x - 1).Value & lineBreak
pBody = pBody & ""
Set pItem = pApp.CreateItem(0)
With pItem
.Subject = mSubject
.To = rSendValue
.HTMLBody = pBody
.Display ' สามารถใช้ .Send ได้เช่นกัน
End With
Set pItem = Nothing
End If
End If
Next
Set pApp = Nothing
End Sub
การวิเคราะห์โค้ด VBA
- เรียก Sub Procedure Send_Email_Date_Condition
- ประกาศชนิด Variable และตั้ง "Conditions" เป็น Sheet
- ใช้ InputBox กำหนดช่วงค่าของเรา
- เลือก Outlook เป็น Mail Application
- ใช้ฟังก์ชัน VBA CDate ตรวจสอบว่าวันที่อยู่ภายใน 7 วันจากวันปัจจุบัน
- ตั้งค่าเนื้อหา อีเมล ในโค้ด
- ใช้ .Display แสดง อีเมล ต้องกด Send เอง ใช้ .Send ส่งอัตโนมัติ
- บันทึกและปิด Module
- เปิดหน้าต่าง Macro (เหมือนวิธีที่ 2)
- เลือก "Send_Email_Date_Condition" และกด Run
- เลือกคอลัมน์ วันที่ (Date) กด OK
- เลือกคอลัมน์ อีเมล (Email) กด OK
- เลือกคอลัมน์ เนื้อหาอีเมล (Email Topic) กด OK
- จะเห็นกล่องโต้ตอบ อีเมล กด Send เพื่อบรรลุเป้าหมาย
อ่านเพิ่มเติม: วิธีส่งอีเมลอัตโนมัติจาก Excel ตามวันที่
ข้อควรจำ
- ในทุกวิธี Outlook เป็น Email Application เริ่มต้น คุณอาจต้องใช้โค้ดที่ต่างกันสำหรับ Application อื่นๆ
ส่วนฝึกหัด
เราเพิ่มชุดข้อมูลฝึกหัดสำหรับแต่ละวิธีในไฟล์ Excel
สรุป
เราได้แนะนำ 3 วิธีในการ ส่งอีเมล หาก เงื่อนไข ตรงกัน ใน Excel ขอบคุณที่อ่าน จงเก่งขึ้นไปเรื่อยๆ!
บทความเกี่ยวข้อง
- วิธีส่งอีเมลจาก Excel พร้อมเนื้อหาโดยใช้ Macro (พร้อมขั้นตอนง่ายๆ)
- วิธีส่งอีเมลอัตโนมัติจาก Excel ไป Outlook (4 วิธี)
- ส่งอีเมลอัตโนมัติจาก Excel ตามเนื้อหาเซลล์ (2 วิธี)
- วิธีส่งไฟล์ Excel ไปยังอีเมลอัตโนมัติ (3 วิธีที่เหมาะสม)
- ส่งอีเมลเตือนอัตโนมัติจากเวิร์กชีต Excel ด้วย VBA
- วิธีดูว่าใครอยู่ในไฟล์ Excel แบบแชร์ (พร้อมขั้นตอนเร็ว)