Computer >> คอมพิวเตอร์ >  >> ซอฟต์แวร์ >> Office

วิธีการกรองค่าอัตโนมัติไม่เท่ากับค่าที่แน่นอนด้วย VBA ใน Excel

ในบทความนี้ ฉันจะแสดงให้คุณเห็นว่าคุณสามารถกรองค่าที่ไม่เท่ากับค่าที่กำหนดโดยอัตโนมัติด้วย 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

วิธีการกรองค่าอัตโนมัติไม่เท่ากับค่าที่แน่นอนด้วย VBA ใน Excel

2 วิธีที่เหมาะสมในการกรองค่าอัตโนมัติไม่เท่ากับค่าที่แน่นอนด้วย VBA ใน Excel

โดยไม่รอช้า ไปที่การสนทนาหลักของเราวันนี้ ขั้นแรก เราจะกรองค่าอัตโนมัติจากทั้งเวิร์กชีต จากนั้นจึงกรองจากช่วงเฉพาะของเวิร์กชีต

1. ค่าตัวกรองอัตโนมัติที่ไม่เท่ากับค่าที่แน่นอนจากทั้งแผ่นงาน

ก่อนอื่น เราจะเรียนรู้การกรองค่าที่ไม่เท่ากับค่าใดค่าหนึ่งจากทั้งแผ่นงานโดยอัตโนมัติด้วย Excel VBA .

ฉันมีเวิร์กชีตชื่อ Sheet1 ที่มีชื่อนักเรียนบางส่วน , คะแนน ในการสอบและเกรด .ของพวกเขา . ชุดข้อมูลเริ่มต้นจากเซลล์ A1 .

วิธีการกรองค่าอัตโนมัติไม่เท่ากับค่าที่แน่นอนด้วย VBA ใน Excel

วัตถุประสงค์ของเราคือกรองอัตโนมัตินักเรียนที่ได้เกรดไม่เท่ากับ 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

วิธีการกรองค่าอัตโนมัติไม่เท่ากับค่าที่แน่นอนด้วย VBA ใน Excel

⧭ ผลลัพธ์:

เปลี่ยนอินพุตตามความต้องการของคุณ แล้วรันโค้ด (ขั้นแรกให้สร้างเวิร์กชีตใหม่ชื่อ Sheet2 หรืออะไรก็ได้ที่เป็นใบงานปลายทาง แล้วรันโค้ด มิฉะนั้นจะแสดงข้อผิดพลาด)

คุณจะได้รับคอลัมน์เฉพาะของชุดข้อมูลของคุณ (คอลัมน์ 1 และ 3 ในตัวอย่างนี้) กรองอัตโนมัติไปยังแผ่นงานปลายทางที่มีเฉพาะค่าที่ไม่เท่ากับค่าที่กำหนด (F ในตัวอย่างนี้)

วิธีการกรองค่าอัตโนมัติไม่เท่ากับค่าที่แน่นอนด้วย VBA ใน Excel

อ่านเพิ่มเติม: VBA เป็นตัวกรองอัตโนมัติที่มีหลายเกณฑ์ในฟิลด์เดียวกันใน Excel (4 วิธี)

2. ค่าตัวกรองอัตโนมัติที่ไม่เท่ากับค่าบางอย่างจากช่วงเซลล์ที่ระบุด้วย Excel VBA

เราได้เรียนรู้ที่จะกรองค่าที่ไม่เท่ากับค่าใดค่าหนึ่งโดยอัตโนมัติจากทั้งเวิร์กชีตใน Excel VBA .

ตอนนี้เราจะเรียนรู้การกรองค่าอัตโนมัติจากช่วงที่กำหนด

ฉันมีเวิร์กชีตชื่อ Sheet3 ที่มีชื่อของนักเรียนบางคน , คะแนน ในการสอบและเกรด .ของพวกเขา . แต่คราวนี้ชุดข้อมูลเริ่มจากเซลล์ B3 จนถึงเซลล์ D15 .

วิธีการกรองค่าอัตโนมัติไม่เท่ากับค่าที่แน่นอนด้วย VBA ใน Excel

ครั้งนี้เป้าหมายของเราคือกรองนักเรียนที่ได้เกรดไม่เท่ากับ 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

วิธีการกรองค่าอัตโนมัติไม่เท่ากับค่าที่แน่นอนด้วย VBA ใน Excel

⧭ ผลลัพธ์:

เรียกใช้โค้ดหลังจากเปลี่ยนอินพุต (อย่าลืมสร้างเวิร์กชีตปลายทาง ก่อนอื่นหากเป็นอย่างอื่น มิฉะนั้น คุณจะพบข้อผิดพลาด)

คุณจะได้รับคอลัมน์เฉพาะของชุดข้อมูลของคุณ (คอลัมน์ 1 และ 3 ในตัวอย่างนี้) กรองอัตโนมัติไปยังเซลล์ปลายทาง (F3 ในตัวอย่างนี้) ของเวิร์กชีตปลายทางที่มีเฉพาะค่าที่ไม่เท่ากับค่าที่กำหนด (F ในตัวอย่างนี้)

วิธีการกรองค่าอัตโนมัติไม่เท่ากับค่าที่แน่นอนด้วย VBA ใน Excel

อ่านเพิ่มเติม: [แก้ไข]:วิธีการกรองอัตโนมัติของคลาสช่วงล้มเหลว (5 โซลูชัน)

สิ่งที่ควรจำ

ก่อนเรียกใช้โค้ดเพื่อกรองค่าอัตโนมัติในเวิร์กชีตใหม่ ให้สร้างเวิร์กชีตนั้น มิฉะนั้น คุณจะพบข้อผิดพลาด

นอกจากนี้ เรายังใช้ UsedRange คุณสมบัติของ VBA เพื่อกรองค่าอัตโนมัติจากทั้งเวิร์กชีต คลิกเพื่อทราบรายละเอียด

บทสรุป

ต่อไปนี้เป็นวิธีการกรองค่าอัตโนมัติที่ไม่เท่ากับค่าที่กำหนดโดยใช้ VBA ใน Excel คุณมีคำถามใด ๆ หรือไม่? อย่าลังเลที่จะถามเรา และอย่าลืมเยี่ยมชมเว็บไซต์ของเรา ExcelDemy สำหรับโพสต์และการอัปเดตเพิ่มเติม

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

  • Excel VBA เพื่อตรวจสอบว่า AutoFilter เปิดอยู่ (4 วิธีง่ายๆ)
  • ตัวกรองอัตโนมัติ VBA:เรียงลำดับจากน้อยไปหามาก (3 วิธี)
  • วิธีการกรองอัตโนมัติและคัดลอกแถวที่มองเห็นได้ด้วย Excel VBA
  • Excel VBA:ลบตัวกรองอัตโนมัติหากมีอยู่ (7 วิธี)