บทความนี้จะสอนวิธี Autofilter ค่าที่ ไม่เท่ากับค่าที่กำหนด ด้วย VBA ใน Excel จะได้เรียนรู้การกรองจากช่วงเซลล์ที่เลือก และจากเวิร์กชีททั้งแผ่น
2 วิธี Autofilter ค่าที่ไม่เท่ากับค่าที่กำหนดด้วย VBA ใน Excel
1. Autofilter ค่าที่ไม่เท่ากับค่าที่กำหนดจากเวิร์กชีททั้งแผ่น
มีข้อมูลใน Sheet1: ชื่อนักเรียน, คะแนน, เกรด (เริ่มที่ A1) ต้องการกรองนักเรียนที่เกรด ไม่ใช่ F ไปที่ Sheet2
ขั้นตอนที่ 1: กำหนดค่าอินพุตSource_Worksheet = "Sheet1"
Destination_Worksheet = "Sheet2"
Dim Filtered_Columns() As Variant
Filtered_Columns = Array(1, 3)
Value_Column = 3
Value = "F"
ขั้นตอนที่ 2: กรองข้อมูลด้วย For-loop
Row_Count = 1
Column_Count = 1
For i = 1 To Worksheets(Source_Worksheet).UsedRange.Rows.Count
If Worksheets(Source_Worksheet).UsedRange.Cells(i, Value_Column) <> Value Then
For j = LBound(Filtered_Columns) To UBound(Filtered_Columns)
Worksheets(Destination_Worksheet).Cells(Row_Count, Column_Count) = Worksheets(Source_Worksheet).UsedRange.Cells(i, Filtered_Columns(j))
Column_Count = Column_Count + 1
Next j
Row_Count = Row_Count + 1
Column_Count = 1
End If
Next i
โค้ด VBA สมบูรณ์:
Sub Autofilter_Values_from_Whole_Worksheet()
Source_Worksheet = "Sheet1"
Destination_Worksheet = "Sheet2"
Dim Filtered_Columns() As Variant
Filtered_Columns = Array(1, 3)
Value_Column = 3
Value = "F"
Row_Count = 1
Column_Count = 1
For i = 1 To Worksheets(Source_Worksheet).UsedRange.Rows.Count
If Worksheets(Source_Worksheet).UsedRange.Cells(i, Value_Column) <> Value Then
For j = LBound(Filtered_Columns) To UBound(Filtered_Columns)
Worksheets(Destination_Worksheet).Cells(Row_Count, Column_Count) = Worksheets(Source_Worksheet).UsedRange.Cells(i, Filtered_Columns(j))
Column_Count = Column_Count + 1
Next j
Row_Count = Row_Count + 1
Column_Count = 1
End If
Next i
End Sub
ผลลัพธ์: รันโค้ด (สร้าง Sheet2 ก่อน) จะได้คอลัมน์ 1 และ 3 ของข้อมูลที่เกรดไม่ใช่ F ใน Sheet2
อ่านเพิ่มเติม: VBA AutoFilter หลายเงื่อนไขในฟิลด์เดียวใน Excel (4 วิธี)
2. Autofilter ค่าที่ไม่เท่ากับค่าที่กำหนดจากช่วงเซลล์เฉพาะ
ข้อมูลใน Sheet3 เริ่มที่ B3 ถึง D15 ต้องการกรองเกรดไม่ใช่ F ไปที่เซลล์ F3 ในชีทเดียวกัน
ขั้นตอนที่ 1: กำหนดค่าอินพุตSource_Worksheet = "Sheet3"
Source_Range = "B3:D15"
Destination_Worksheet = "Sheet3"
Destination_Cell = "F3"
Dim Filtered_Columns() As Variant
Filtered_Columns = Array(1, 3)
Value_Column = 3
Value = "F"
ขั้นตอนที่ 2: กรองข้อมูลด้วย For-loop
Row_Count = 1
Column_Count = 1
For i = 1 To Worksheets(Source_Worksheet).Range(Source_Range).Rows.Count
If Worksheets(Source_Worksheet).Range(Source_Range).Cells(i, Value_Column) <> Value Then
For j = LBound(Filtered_Columns) To UBound(Filtered_Columns)
Worksheets(Destination_Worksheet).Range(Destination_Cell).Cells(Row_Count, Column_Count) = Worksheets(Source_Worksheet).Range(Source_Range).Cells(i, Filtered_Columns(j))
Column_Count = Column_Count + 1
Next j
Row_Count = Row_Count + 1
Column_Count = 1
End If
Next i
โค้ด VBA สมบูรณ์:
Sub Autofilter_Values_from_Specific_Range()
Source_Worksheet = "Sheet3"
Source_Range = "B3:D15"
Destination_Worksheet = "Sheet3"
Destination_Cell = "F3"
Dim Filtered_Columns() As Variant
Filtered_Columns = Array(1, 3)
Value_Column = 3
Value = "F"
Row_Count = 1
Column_Count = 1
For i = 1 To Worksheets(Source_Worksheet).Range(Source_Range).Rows.Count
If Worksheets(Source_Worksheet).Range(Source_Range).Cells(i, Value_Column) <> Value Then
For j = LBound(Filtered_Columns) To UBound(Filtered_Columns)
Worksheets(Destination_Worksheet).Range(Destination_Cell).Cells(Row_Count, Column_Count) = Worksheets(Source_Worksheet).Range(Source_Range).Cells(i, Filtered_Columns(j))
Column_Count = Column_Count + 1
Next j
Row_Count = Row_Count + 1
Column_Count = 1
End If
Next i
End Sub
ผลลัพธ์: รันโค้ด จะได้คอลัมน์ 1 และ 3 ที่กรองแล้ว อยู่ที่เซลล์ F3 ของ Sheet3
อ่านเพิ่มเติม: [แก้ไข]: AutoFilter Method of Range Class Failed (5 วิธีแก้)
สิ่งที่ควรจำ
- ก่อนรันโค้ดที่ส่งออกไปยังชีทใหม่ ต้องสร้างชีทปลายทางก่อน มิฉะนั้นจะเกิดข้อผิดพลาด
- ใช้คุณสมบัติ UsedRange ของ VBA สำหรับกรองจากทั้งแผ่นงาน
สรุป
นี่คือวิธี Autofilter ค่าที่ไม่เท่ากับค่าที่กำหนดด้วย VBA ใน Excel 2 วิธี: จากทั้งแผ่นงาน และจากช่วงเฉพาะ หากมีคำถามสามารถถามได้ และเยี่ยมชม ExcelDemy สำหรับบทความเพิ่มเติม