Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ซอฟต์แวร์ >> Office

VBA Autofilter: กรองตัดค่าเฉพาะออกจากช่วงข้อมูล Excel

บทความนี้จะสอนวิธี 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 สำหรับบทความเพิ่มเติม

บทความที่เกี่ยวข้อง