ในบทความนี้ ฉันจะแสดงให้คุณเห็นว่าคุณสามารถกรองค่าที่ไม่เท่ากับค่าที่กำหนดโดยอัตโนมัติด้วย VBA ได้อย่างไร ใน Excel คุณจะได้เรียนรู้การกรองค่าอัตโนมัติจากช่วงของเซลล์ที่เลือก รวมทั้งจากทั้งเวิร์กชีต
ค่าตัวกรองอัตโนมัติไม่เท่ากับค่าที่แน่นอนด้วย VBA ใน Excel (มุมมองด่วน)
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
2 วิธีที่เหมาะสมในการกรองค่าอัตโนมัติไม่เท่ากับค่าที่แน่นอนด้วย VBA ใน Excel
โดยไม่รอช้า ไปที่การสนทนาหลักของเราวันนี้ ขั้นแรก เราจะกรองค่าอัตโนมัติจากทั้งเวิร์กชีต จากนั้นจึงกรองจากช่วงเฉพาะของเวิร์กชีต
1. ค่าตัวกรองอัตโนมัติที่ไม่เท่ากับค่าที่แน่นอนจากทั้งแผ่นงาน
ก่อนอื่น เราจะเรียนรู้การกรองค่าที่ไม่เท่ากับค่าใดค่าหนึ่งจากทั้งแผ่นงานโดยอัตโนมัติด้วย Excel VBA .
ฉันมีเวิร์กชีตชื่อ Sheet1 ที่มีชื่อนักเรียนบางส่วน , คะแนน ในการสอบและเกรด .ของพวกเขา . ชุดข้อมูลเริ่มต้นจากเซลล์ A1 .
วัตถุประสงค์ของเราคือกรองอัตโนมัตินักเรียนที่ได้เกรดไม่เท่ากับ F ในแผ่นงานชื่อ Sheet2 .
⧪ ขั้นตอนที่ 1:การแทรกอินพุต
ขั้นแรก คุณต้องแทรกอินพุตลงในโค้ด ซึ่งรวมถึงชื่อของ เวิร์กชีตต้นทาง (Sheet1) , แผ่นงานปลายทาง (Sheet2) , คอลัมน์ที่จะถูกกรอง (1, 3) , คอลัมน์ที่มีค่าบางอย่าง (3) และ ค่าบางอย่าง (F) .
Source_Worksheet = "Sheet1"
Destination_Worksheet = "Sheet2"
Dim Filtered_Columns() As Variant
Filtered_Columns = Array(1, 3)
Value_Column = 3
Value = "F"
⧪ ขั้นตอนที่ 2:การกรองค่าอัตโนมัติด้วย For-loop
ต่อไป เราจะกรองค่าจากแผ่นงานต้นทางไปยังแผ่นงานปลายทางโดยอัตโนมัติโดยทำซ้ำผ่าน 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 . ที่สมบูรณ์ รหัสจะเป็น:
⧭ รหัส 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 ในตัวอย่างนี้)
อ่านเพิ่มเติม: VBA เป็นตัวกรองอัตโนมัติที่มีหลายเกณฑ์ในฟิลด์เดียวกันใน Excel (4 วิธี)
2. ค่าตัวกรองอัตโนมัติที่ไม่เท่ากับค่าบางอย่างจากช่วงเซลล์ที่ระบุด้วย Excel VBA
เราได้เรียนรู้ที่จะกรองค่าที่ไม่เท่ากับค่าใดค่าหนึ่งโดยอัตโนมัติจากทั้งเวิร์กชีตใน Excel VBA .
ตอนนี้เราจะเรียนรู้การกรองค่าอัตโนมัติจากช่วงที่กำหนด
ฉันมีเวิร์กชีตชื่อ Sheet3 ที่มีชื่อของนักเรียนบางคน , คะแนน ในการสอบและเกรด .ของพวกเขา . แต่คราวนี้ชุดข้อมูลเริ่มจากเซลล์ B3 จนถึงเซลล์ D15 .
ครั้งนี้เป้าหมายของเราคือกรองนักเรียนที่ได้เกรดไม่เท่ากับ F . โดยอัตโนมัติ ในแผ่นงานเดียวกัน ในเซลล์ F3 .
⧪ ขั้นตอนที่ 1:การแทรกอินพุต
ขั้นแรก คุณต้องแทรกอินพุตลงในโค้ด คราวนี้จะรวมชื่อของเวิร์กชีตต้นทาง (ชีต3) , แผ่นงานปลายทาง (ชีต3) , เซลล์ปลายทาง (F3 ) คอลัมน์ที่จะถูกกรอง (1, 3) , คอลัมน์ที่มีค่าบางอย่าง (3) และ ค่าบางอย่าง (F) .
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
ต่อไป เราจะกรองค่าอัตโนมัติโดยการวนซ้ำผ่าน 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 . ที่สมบูรณ์ รหัสจะเป็น:
⧭ รหัส 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 ในตัวอย่างนี้) ของเวิร์กชีตปลายทางที่มีเฉพาะค่าที่ไม่เท่ากับค่าที่กำหนด (F ในตัวอย่างนี้)
อ่านเพิ่มเติม: [แก้ไข]:วิธีการกรองอัตโนมัติของคลาสช่วงล้มเหลว (5 โซลูชัน)
สิ่งที่ควรจำ
ก่อนเรียกใช้โค้ดเพื่อกรองค่าอัตโนมัติในเวิร์กชีตใหม่ ให้สร้างเวิร์กชีตนั้น มิฉะนั้น คุณจะพบข้อผิดพลาด
นอกจากนี้ เรายังใช้ UsedRange คุณสมบัติของ VBA เพื่อกรองค่าอัตโนมัติจากทั้งเวิร์กชีต คลิกเพื่อทราบรายละเอียด
บทสรุป
ต่อไปนี้เป็นวิธีการกรองค่าอัตโนมัติที่ไม่เท่ากับค่าที่กำหนดโดยใช้ VBA ใน Excel คุณมีคำถามใด ๆ หรือไม่? อย่าลังเลที่จะถามเรา และอย่าลืมเยี่ยมชมเว็บไซต์ของเรา ExcelDemy สำหรับโพสต์และการอัปเดตเพิ่มเติม
บทความที่เกี่ยวข้อง
- Excel VBA เพื่อตรวจสอบว่า AutoFilter เปิดอยู่ (4 วิธีง่ายๆ)
- ตัวกรองอัตโนมัติ VBA:เรียงลำดับจากน้อยไปหามาก (3 วิธี)
- วิธีการกรองอัตโนมัติและคัดลอกแถวที่มองเห็นได้ด้วย Excel VBA
- Excel VBA:ลบตัวกรองอัตโนมัติหากมีอยู่ (7 วิธี)