เมื่อทำงานกับปริมาณข้อมูลมากและต้องตั้งค่าตัวกรองหลายอย่างพร้อมกัน Advanced Filtering (การกรองขั้นสูง) ใน Excel จะช่วยได้มาก อาจนำไปใช้ทำความสะอาดข้อมูลโดยลบรายการซ้ำได้อีกด้วย ในขณะใช้ Advanced Filter รหัส VBA จะทำให้การดำเนินการง่ายขึ้นมาก ในบทช่วยสอนนี้ จะแสดงวิธีใช้ VBA Advanced Filter สำหรับช่วงเกณฑ์หลายอย่างใน Excel
5 วิธีที่มีประสิทธิภาพ สำหรับ VBA Advanced Filter พร้อมหลายเกณฑ์ในช่วงใน Excel
ในส่วนต่อไป จะอภิปราย 5 วิธีการใช้ VBA Advanced Filter สำหรับหลายเกณฑ์ ก่อนอื่น คุณอาจต้องรู้ไวยากรณ์ (syntax) ของ VBA Advanced Filter
ไวยากรณ์ VBA Advanced Filter:

- AdvancedFilter: อ้างอิงออบเจ็กต์ช่วง (Range object) คุณสามารถตั้งค่าช่วงที่ต้องการใช้ตัวกรอง
- Action: เป็นอาร์กิวเมนต์ที่จำเป็น มี 2 ตัวเลือก xlFilterInPlace หรือ xlFilterCopy xlFilterInPlace ใช้กรองค่าที่ตำแหน่งเดิมของชุดข้อมูล xlFilterCopy ใช้เพื่อได้ค่าที่กรองแล้วในตำแหน่งที่ต้องการ
- CriteriaRange: แสดงเกณฑ์ที่จะใช้กรองค่า
- CopyToRange: เป็นตำแหน่งที่จะบันทึกผลลัพธ์การกรอง
- Unique: เป็นอาร์กิวเมนต์ tùy chọn ใช้ True เพื่อกรองเฉพาะค่าที่ไม่ซ้ำ ไม่ใช่ค่าเริ่มต้นคือ False
ในภาพด้านล่าง มีชุดข้อมูลตัวอย่างสำหรับใช้ตัวกรองทั้งหมดที่ต้องการ

1. ใช้ VBA Advanced Filter สำหรับเกณฑ์ OR ในช่วงใน Excel
ในวิธีแรก จะใช้ เกณฑ์ OR ด้วย VBA Advanced Filter สมมติว่าต้องการกรองข้อมูลสำหรับชื่อผลิตภัณฑ์ Cookies และ Chocolate เพื่อใช้ เกณฑ์ OR คุณควรวางค่าในแถวที่ต่างกัน ทำตามขั้นตอนที่ระบุด้านล่าง

ขั้นตอนที่ 1:
- กด Alt + F11 เพื่อเปิด VBA Macro
- คลิก Insert (แทรก)
- เลือก Module (โมดูล)

ขั้นตอนที่ 2:
- วางโค้ด VBA ต่อไปนี้เพื่อใช้ OR
Sub Apply_VBA_Advanced_Filter_for_OR_Criteria()
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of datase range and criteria range
Set Dataset_Rng = Sheets("Sheet1").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet1").Range("B14:E16")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Criteria_Rng
End Sub

ขั้นตอนที่ 3:
- บันทึกโปรแกรมและกด F5 เพื่อรัน
- ดังนั้น คุณจะได้ผลลัพธ์ที่กรองแล้วตามภาพด้านล่าง

หมายเหตุ. เพื่อย้อนกลับกระบวนการหรือลบทัวกรองทั้งหมด ให้วางและรันโปรแกรม VBA
Sub Remove_All_Filter()
On Error Resume Next
'command to remove all the filter to show the previous dataset
ActiveSheet.ShowAllData
End Sub

- ผลลัพธ์ จะได้ชุดข้อมูลเดิมกลับมา

อ่านเพิ่มเติม: ตัวอย่าง Excel VBA ของ Advanced Filter พร้อมเกณฑ์ (6 เกณฑ์)
2. ใช้ VBA Advanced Filter สำหรับเกณฑ์ AND ในช่วงใน Excel
คล้ายกับวิธีก่อนหน้า ตอนนี้จะใช้ VBA Advanced Filter สำหรับ เกณฑ์ AND สมมติว่าเราต้องการทราบ Cookies ที่มีราคา $0.65 ตามภาพหน้าจอด้านล่าง สำหรับการใช้ เกณฑ์ OR คุณควรวางค่าในคอลัมน์ที่ต่างกัน เพื่อใช้ เกณฑ์ AND ทำตามคำแนะนำด้านล่าง

ขั้นตอนที่ 1:
- กด Alt + F11 เพื่อเปิด VBA Macro
- หลังเปิด VBA Macro วางโค้ด VBA ต่อไปนี้ในโมดูลใหม่
Sub Apply_VBA_Advanced_Filter_for_AND_Criteria()
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of dataset range and criteria range
Set Dataset_Rng = Sheets("Sheet2").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet2").Range("B14:E15")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Criteria_Rng
End Sub

ขั้นตอนที่ 2:
- กด F5 เพื่อรันโปรแกรมหลังจากบันทึกแล้ว
- สุดท้าย ได้ผลลัพธ์ที่กรองแล้ว

อ่านเพิ่มเติม: VBA คัดลอกข้อมูลไปแผ่นงานอื่นด้วย Advanced Filter ใน Excel
3. ใช้ VBA Advanced Filter สำหรับเกณฑ์ OR ร่วมกับ AND ในช่วงใน Excel
คุณยังสามารถใช้ เกณฑ์ OR และ AND ร่วมกันได้ ตัวอย่างเช่น ต้องการค่าสำหรับ Cookies หรือ Chocolates แต่สำหรับ Cookies มีเกณฑ์เพิ่มเติมคือราคา $0.65 ทำตามขั้นตอนด้านล่าง

ขั้นตอนที่ 1:
- วางโค้ด VBA ต่อไปนี้หลังเปิด VBA Macro
Sub Apply_VBA_Advanced_Filter_for_OR_with_AND_Criteria()
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of dataset range and criteria range
Set Dataset_Rng = Sheets("Sheet3").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet3").Range("B14:E16")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Criteria_Rng
End Sub

ขั้นตอนที่ 2:
- บันทึกโปรแกรมก่อน แล้วกด F5 เพื่อรัน
- ผลลัพธ์ จะได้ค่าที่มี AND และ OR เฉพาะเจาะจง

อ่านเพิ่มเติม: ใช้ Advanced Filter ตามเกณฑ์หลายอย่างในคอลัมน์เดียวใน Excel
การอ่านที่คล้ายคลึงกัน:
- Advanced Filter พร้อมเกณฑ์หลายอย่างใน Excel (15 ตัวอย่างที่เหมาะสม)
- Dynamic Advanced Filter Excel (VBA & Macro)
- วิธีใช้ Advanced Filter ใน VBA (แนวทางแบบขั้นตอน)
- Advanced Filter พร้อม Criteria Range ใน Excel (18 การประยุกต์ใช้)
- Excel Advanced Filter Not Working (2 เหตุผล & วิธีแก้)
4. ใช้ VBA Advanced Filter สำหรับค่าที่ไม่ซ้ำ (Unique Values) พร้อมหลายเกณฑ์ใน Excel
นอกจากนี้ หากมีข้อมูลซ้ำในชุดข้อมูล คุณสามารถลบข้อมูลซ้ำขณะกรองได้ เราจะเพิ่มอาร์กิวเมนต์ Unique เป็น True เพื่อรับเฉพาะค่าที่ไม่ซ้ำและลบรายการซ้ำ ทำตามคำแนะนำด้านล่าง

ขั้นตอนที่ 1:
- เปิด VBA Macro โดยกด Alt + F11
- วางโค้ด VBA ต่อไปนี้ในโมดูลใหม่
Sub Apply_VBA_Advanced_Filter_for_Unique_Values()
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of dataset range and criteria range
Set Dataset_Rng = Sheets("Sheet4").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet4").Range("B14:E16")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Criteria_Rng, Unique:=True
End Sub

ขั้นตอนที่ 2:
- กด F5 เพื่อรันโปรแกรมหลังจากบันทึก
- ดังนั้น จะได้ค่าเฉพาะค่าที่ไม่ซ้ำ

อ่านเพิ่มเติม: วิธีใช้ Advanced Filter สำหรับบันทึกที่ไม่ซ้ำ (Unique Records Only) ใน Excel
5. ใช้ VBA Advanced Filter สำหรับกรณีเงื่อนไข (Conditional Case)
นอกจากวิธีก่อนหน้า คุณยังสามารถใช้เงื่อนไขกับสูตรได้ ตัวอย่างเช่น เราต้องการหา ราคารวม (Total prices) ที่มากกว่า $100 เพื่อทำให้สำเร็จ ทำตามขั้นตอนง่ายๆ

ขั้นตอนที่ 1:
- กด Alt + F11 เพื่อเปิด VBA Macro
- เลือก Module ใหม่และวาง VBA codes ต่อไปนี้
Sub Apply_VBA_Advanced_Filter_for_Formula()
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of dataset range and criteria range
Set Dataset_Rng = Sheets("Sheet5").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet5").Range("B14:E15")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Criteria_Rng
End Sub

ขั้นตอนที่ 2:
- บันทึกโปรแกรมและกดปุ่ม F5 เพื่อดูผลลัพธ์
หมายเหตุ. นอกจากนี้ คุณยังสามารถรับผลลัพธ์ในพื้นที่ที่ต้องการ ไม่ว่าจะเป็นช่วงใหม่หรือแผ่นงานใหม่ โดยใช้ xlFilterCopy action เพียงแค่วาง VBA codes และรันเพื่อได้ผลลัพธ์ใน Sheet6 ในช่วง B4:E11
'Declare Variable for dataset range and for criteria range
Dim Dataset_Rng As Range
Dim Criteria_Rng As Range
'Set the location and range of dataset range and criteria range
Set Dataset_Rng = Sheets("Sheet5").Range("B4:E11")
Set Criteria_Rng = Sheets("Sheet5").Range("B14:E15")
'Apply Advanced Filter to filter the dataset using the criteria
Dataset_Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Criteria_Rng, CopyToRange:=Sheets("Sheet6").Range("B4:E11")
End Sub

- ดังนั้น ดูผลลัพธ์สุดท้ายในแผ่นงานใหม่ 'Sheet6'

อ่านเพิ่มเติม: วิธีใช้ Advanced Filter หาก Criteria Range มีข้อความใน Excel
สรุป
สรุปได้ว่า หวังว่าตอนนี้คุณเข้าใจแล้ววิธีใช้ VBA advanced filter ใน Excel เพื่อกรองช่วงเกณฑ์หลายอย่าง วิธีการทั้งหมดควรนำไปสอนและฝึกปฏิบัติกับข้อมูลของคุณ ดูสมุดฝึกปฏิบัติและนำสิ่งที่เรียนรู้ไปใช้ เพราะการสนับสนุนที่สำคัญของคุณ เราจึงได้แรงจูงใจสร้างสัมมนาแบบนี้ต่อไป
หากมีคำถาม โปรดอย่าลังเลติดต่อเรา โปรดบอกเราว่าคุณคิดอะไรในส่วนความคิดเห็นด้านล่าง
ทีม Exceldemy จะตอบคำถามของคุณเร็วที่สุด
อยู่กับเราและเรียนรู้ต่อไป
บทความที่เกี่ยวข้อง
- Excel Advanced Filter [หลายคอลัมน์ & เกณฑ์, ใช้สูตร & ตัวแทน]
- วิธีใช้ Advanced Filter ตัดเซลล์ว่างใน Excel (3 เทคนิคง่าย)
- Excel VBA: Advanced Filter พร้อมเกณฑ์หลายอย่างในช่วง (5 วิธี)
- วิธีใช้ Advanced Filter คัดลอกไปตำแหน่งอื่นใน Excel