โดยทั่วไปเราใช้ ตัวกรอง (Filters) ใน Microsoft Excel เมื่อต้องการแยกข้อมูลเฉพาะจากข้อมูลจำนวนมาก ตัวกรองขั้นสูง (Advanced Filter) เพิ่มความสามารถพิเศษเพิ่มเติม Excel VBA ก็มีตัวเลือกตัวกรองขั้นสูงนี้เช่นกัน บทความนี้จะแสดงตัวอย่างการใช้ Excel VBA กับเกณฑ์ตัวกรองขั้นสูง
6 ตัวอย่าง Excel VBA Advanced Filter พร้อมเกณฑ์การกรอง
จะแสดง 6 ตัวอย่างของเกณฑ์การกรองขั้นสูงด้วย Excel VBA ในส่วนนี้
เราจะใช้ชุดข้อมูลต่อไปนี้สำหรับการสาธิต

ตัวอย่างที่ 1: Excel VBA กรองข้อมูลในตำแหน่งเดิม
เราจะใช้ VBA Macro เพื่อกรองข้อมูลตามเกณฑ์และวางข้อมูลที่กรองแล้วไว้ที่ตำแหน่งเดิม

ในช่วง B16:E17 เราตั้งค่าเกณฑ์การกรอง
ขั้นตอนที่ 1:
- ไปที่แท็บ Developer
- คลิก Record Macro จากริบบอน
- กล่องโต้ตอบใหม่จะปรากฏ ตั้งชื่อ Macro แล้วกด OK

ขั้นตอนที่ 2:
- คลิก Macros บนริบบอน
- เลือก Macro และคลิก Step Into

ขั้นตอนที่ 3:
- คัดลอกโค้ด VBA ต่อไปนี้และวางในโมดูลคำสั่ง
Sub Filter_Criteria()
Dim data As Range
Dim criteria As Range
Set data = Range("B4:E14")
Set criteria = Range("B16:E17")
data.AdvancedFilter xlFilterInPlace, criteria
End Sub

ขั้นตอนที่ 4:
- กดปุ่ม F5 เพื่อรันโค้ด

เราตั้งเกณฑ์ให้แสดงยอดขายของสาขา Chicago เท่านั้น และนี่คือผลลัพธ์
ข้อมูลและเกณฑ์ของเราอยู่ในแผ่นงานเดียวกัน
อ่านเพิ่มเติม: วิธีใช้ Advanced Filter คัดลอกไปยังตำแหน่งอื่นใน Excel
ตัวอย่างที่ 2: Excel VBA Advanced Filter เมื่อข้อมูลและเกณฑ์อยู่ในแผ่นงานต่างกัน
ในตัวอย่างนี้จะแสดงวิธีจัดการเมื่อเกณฑ์และข้อมูลอยู่ในแผ่นงานที่ต่างกัน

ข้อมูลของเราอยู่ในแผ่นชื่อ Criteria_Different_Sheet และเกณฑ์อยู่ในแผ่น Criteria
ขั้นตอนที่ 1:
- กด Alt+F11 เพื่อเข้าสู่โมดูลคำสั่ง
- วางโค้ดด้านล่างในโมดูลคำสั่ง
Sub Filter_Criteria_2()
Dim data As Range
Dim criteria As Range
Set data = Sheets("Criteria_Different_Sheet").Range("B4:E14")
Set criteria = Sheets("Criteria").Range("B4:E5")
data.AdvancedFilter xlFilterInPlace, criteria
End Sub

ขั้นตอนที่ 2:
- กด F5 เพื่อรันโค้ด

เราสามารถกรองข้อมูลได้แม้เกณฑ์จะอยู่ในแผ่นงานอื่น
อ่านเพิ่มเติม: ใช้ Advanced Filter ตามเกณฑ์หลายอย่างในคอลัมน์เดียวใน Excel
ตัวอย่างที่ 3: Excel VBA กรองข้อมูลและวางในตำแหน่งต่างกันในแผ่นงานเดียวกัน
หากต้องการวางข้อมูลที่กรองแล้วในตำแหน่งอื่น ให้ทำตามขั้นตอนด้านล่าง
ขั้นตอนที่ 1:
- กด Alt+F11 เพื่อเข้าสู่โมดูลคำสั่ง
- เขียนโค้ดต่อไปนี้ในโมดูลคำสั่ง
Sub Filter_Criteria_3()
Dim data As Range
Dim criteria As Range
Set data = Range("B4:E14")
Set criteria = Range("B16:E17")
data.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=criteria, CopyToRange:=Range("G4:J14")
End Sub

ขั้นตอนที่ 2:
- กดปุ่ม F5 และโค้ดจะทำงาน

เห็นได้ว่าข้อมูลที่กรองแล้วถูกวางในตำแหน่งอื่น คำสั่ง CopyToRange ระบุตำแหน่งปลายทางที่แตกต่าง
เนื้อหาเกี่ยวข้อง: วิธีใช้ Advanced Filter คัดลอกข้อมูลไปยังแผ่นงานอื่นใน Excel
บทความคล้ายกัน:
- Excel VBA: Advanced Filter พร้อมเกณฑ์หลายอย่างในช่วง (5 วิธี)
- วิธีใช้ Advanced Filter เพื่อไม่นับเซลล์ว่างใน Excel (3 เทคนิคง่าย)
- Excel Advanced Filter [หลายคอลัมน์ & เกณฑ์, ใช้สูตร & กับ Wildcards]
ตัวอย่างที่ 4: กรองเฉพาะข้อมูลที่ไม่ซ้ำกันด้วย Excel VBA
เราสามารถดึงข้อมูลที่ไม่ซ้ำกัน (Unique) ได้จาก Excel VBA Advanced Filter ในกระบวนการนี้ จะเหลือเฉพาะครั้งแรกที่พบ (1st occurrence) และครั้งที่ 2 ขึ้นไปจะถูกลบออก
ขั้นตอนที่ 1:
- เข้าสู่โมดูลคำสั่งด้วยการกด Alt+F11
- วางโค้ดต่อไปนี้ในโมดูลคำสั่ง
Sub Filter_Criteria_4()
Dim data As Range
Dim criteria As Range
Set data = Range("B4:E14")
Set criteria = Range("B16:E17")
data.AdvancedFilter xlFilterInPlace, criteria, , True
End Sub

ขั้นตอนที่ 2:
- รันโค้ดโดยกด F5

เราเครื่องหมายการเกิดครั้งแรกด้วยสีเขียว และครั้งที่สองด้วยสีเหลือง หลังรันโค้ด เซลล์สีเหลืองถูกลบออก
อ่านเพิ่มเติม: วิธีใช้ Advanced Filter สำหรับเฉพาะเรคคอร์ดที่ไม่ซ้ำกันใน Excel
ตัวอย่างที่ 5: กรองและลบข้อมูลซ้ำโดยไม่ต้องตั้งเกณฑ์ใน Excel VBA
เราสามารถลบข้อมูลซ้ำได้โดยไม่ต้องตั้งค่าเกณฑ์ ให้ทำตามขั้นตอนด้านล่าง
ขั้นตอนที่ 1:
- ไปที่โมดูลคำสั่ง VBA โดยกด Alt+F11
- คัดลอกและวางโค้ดต่อไปนี้ในโมดูลคำสั่ง
Sub Filter_Criteria_5()
Dim data As Range
Dim criteria As Range
Set data = Range("B4:E14")
data.AdvancedFilter xlFilterInPlace, , , True
End Sub

ขั้นตอนที่ 2:
- กดปุ่ม F5 และโค้ดจะทำงาน

ดูที่ชุดข้อมูล เราเครื่องหมายข้อมูลซ้ำไว้ หลังใช้โค้ดแล้ว จะเหลือเพียงครั้งแรกที่พบ และข้อมูลซ้ำอื่นๆ ถูกลบออก
อ่านเพิ่มเติม: Excel Advanced Filter ไม่ทำงาน (2 สาเหตุ & วิธีแก้)
ตัวอย่างที่ 6: ใส่เครื่องหมายเปรียบเทียบในเกณฑ์เพื่อกรองข้อมูล
เราสามารถใช้ตัวดำเนินการ (Operators) ในเกณฑ์เพื่อกรองข้อมูล ให้ทำตามขั้นตอนต่อไปนี้
ขั้นตอนที่ 1:
- กด Alt+F11 และเข้าสู่โมดูลคำสั่ง
- วางโค้ดด้านล่างในโมดูล
Sub Filter_Criteria_7()
Dim data As Range
Dim criteria As Range
Set data = Range("B4:E14")
Set criteria = Range("B16:E17")
data.AdvancedFilter xlFilterCopy, criteria, Range("G4:J14")
End Sub

ขั้นตอนที่ 2:
- กด F5 เพื่อรันโค้ด

ในผลลัพธ์ เราได้ค่าที่มากกว่า $1.00
อ่านเพิ่มเติม: วิธีใช้ Advanced Filter ใน VBA (แนวทางแบบขั้นตอน)
สิ่งที่ควรจำ
- คอลัมน์ข้อมูลทุกคอลัมน์ต้องมีหัวข้อที่ไม่ซ้ำกัน
- ไม่ควรมีแถวว่างในชุดข้อมูล
สรุป
ในบทความนี้ เราได้แสดง 6 ตัวอย่างของเกณฑ์การกรองขั้นสูงด้วย Excel VBA หวังว่าจะตอบสนองความต้องการของคุณ โปรดเยี่ยมชมเว็บไซต์ Exceldemy.com และให้คำแนะนำในกล่องความคิดเห็น
บทความเกี่ยวข้อง
- Advanced Filter พร้อมเกณฑ์หลายอย่างใน Excel (15 ตัวอย่างที่เหมาะสม)
- Dynamic Advanced Filter Excel (VBA & Macro)
- Advanced Filter พร้อมช่วงเกณฑ์ใน Excel (18 การประยุกต์ใช้)
- วิธีใช้ Advanced Filter หากช่วงเกณฑ์มีข้อความใน Excel
- Excel Advanced Filter: ใช้ "Does Not Contain" (2 วิธี)