Trong bài viết này, tôi sẽ chỉ cho bạn cách bạn có thể tự động lọc các giá trị không bằng một giá trị nhất định với VBA trong Excel. Bạn sẽ học cách tự động lọc các giá trị từ một phạm vi ô đã chọn, cũng như từ toàn bộ trang tính.
Giá trị của bộ lọc tự động không bằng một giá trị nhất định với VBA trong Excel (Xem nhanh)
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 phương pháp thích hợp để tự động lọc các giá trị không bằng một giá trị nhất định với VBA trong Excel
Đừng chần chừ thêm nữa, chúng ta hãy đi đến cuộc thảo luận chính của chúng ta ngày hôm nay. Trước tiên, chúng tôi sẽ tự động lọc các giá trị từ toàn bộ trang tính, sau đó từ một phạm vi cụ thể của trang tính.
1. Các giá trị của bộ lọc tự động không ngang bằng với một giá trị nhất định từ Toàn bộ trang tính
Trước hết, chúng ta sẽ học cách tự động lọc các giá trị không bằng một giá trị nhất định từ toàn bộ trang tính với Excel VBA .
Ở đây, tôi có một trang tính có tên là Trang tính1 có chứa tên của một số sinh viên , nhãn hiệu của họ trong một bài kiểm tra và điểm của họ . Tập dữ liệu bắt đầu ngay từ ô A1 .
Mục tiêu của chúng tôi là tự động lọc những sinh viên có điểm không bằng F trong trang tính có tên Sheet2 .
⧪ Bước 1:Chèn đầu vào
Đầu tiên, bạn phải chèn các đầu vào cho mã. Điều này bao gồm tên của trang tính nguồn (Sheet1) , trang tính đích (Sheet2) , cột sẽ được lọc (1, 3) , cột có giá trị nhất định (3) và giá trị nhất định (F) .
Source_Worksheet = "Sheet1"
Destination_Worksheet = "Sheet2"
Dim Filtered_Columns() As Variant
Filtered_Columns = Array(1, 3)
Value_Column = 3
Value = "F"
⧪ Bước 2:Tự động lọc các giá trị bằng vòng lặp For
Tiếp theo, chúng tôi sẽ tự động lọc các giá trị từ trang tính nguồn sang trang tính đích bằng cách lặp lại qua vòng lặp .
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
Do đó, VBA hoàn chỉnh mã sẽ là:
⧭ Mã 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
⧭ Đầu ra:
Thay đổi các đầu vào theo nhu cầu của bạn, rồi chạy mã (Trước tiên, hãy tạo một trang tính mới có tên là Sheet2 hoặc bất kỳ thứ gì dưới dạng trang tính đích của bạn , sau đó chạy mã. Nếu không, nó sẽ hiển thị lỗi.).
Bạn sẽ nhận được các cột cụ thể của tập dữ liệu của mình (Cột 1 và 3 trong ví dụ này) được tự động lọc thành trang tính đích chỉ chứa các giá trị không bằng giá trị nhất định ( F trong ví dụ này).
Đọc thêm: VBA để tự động lọc với nhiều tiêu chí trên cùng một trường trong Excel (4 phương pháp)
2. Các giá trị tự động lọc không bằng một giá trị nhất định từ một phạm vi ô cụ thể với Excel VBA
Chúng tôi đã học cách tự động lọc các giá trị không bằng một giá trị nhất định từ toàn bộ trang tính trong Excel VBA .
Bây giờ chúng ta sẽ học cách tự động lọc các giá trị từ một phạm vi cụ thể.
Ở đây, tôi có một trang tính có tên là Sheet3 lại chứa tên của một số sinh viên , nhãn hiệu của họ trong một bài kiểm tra và điểm của họ . Nhưng lần này tập dữ liệu bắt đầu từ ô B3 lên đến ô D15 .
Lần này, mục tiêu của chúng tôi là tự động lọc những sinh viên có điểm không bằng F trong cùng một trang tính, trong ô F3 .
⧪ Bước 1:Chèn đầu vào
Đầu tiên, bạn phải chèn các đầu vào cho mã. Lần này, nó sẽ bao gồm tên của trang tính nguồn (Sheet3) , trang tính đích (Sheet3) , ô đích ( F3 ), cột sẽ được lọc (1, 3) , cột có giá trị nhất định (3) và giá trị nhất định (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"
⧪ Bước 2:Tự động lọc các giá trị bằng vòng lặp For
Tiếp theo, chúng tôi sẽ tự động lọc các giá trị bằng cách lặp lại qua vòng lặp cho .
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
Do đó, VBA hoàn chỉnh mã sẽ là:
⧭ Mã 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
⧭ Đầu ra:
Chạy mã sau khi thay đổi đầu vào (Đừng quên tạo trang tính đích trước tiên nếu đó là một khác, nếu không bạn sẽ gặp lỗi.).
Bạn sẽ nhận được các cột cụ thể của tập dữ liệu của mình (Cột 1 và 3 trong ví dụ này) được tự động lọc thành ô đích ( F3 trong ví dụ này) của trang tính đích chỉ chứa các giá trị không bằng giá trị nhất định ( F trong ví dụ này).
Đọc thêm: [Khắc phục]:Phương pháp tự động lọc của lớp phạm vi không thành công (5 giải pháp)
Những điều cần nhớ
Trước khi chạy mã để tự động lọc các giá trị vào một trang tính mới, hãy tạo trang tính đó. Nếu không, bạn sẽ gặp lỗi.
Ngoài ra, ở đây chúng tôi đã sử dụng usedRange thuộc tính của VBA để tự động lọc các giá trị từ toàn bộ trang tính. Nhấp vào nó để biết chi tiết về nó.
Kết luận
Vì vậy, đây là các cách để tự động lọc các giá trị không bằng một giá trị nhất định bằng cách sử dụng VBA trong Excel. Bạn có câu hỏi nào không? Hãy hỏi chúng tôi. Và đừng quên truy cập trang web ExcelDemy của chúng tôi để biết thêm các bài đăng và cập nhật.
Các bài viết liên quan
- Excel VBA để Kiểm tra xem Tự động Lọc có được Bật không (4 Cách Dễ dàng)
- Bộ lọc tự động VBA:Sắp xếp Nhỏ nhất đến Lớn nhất (3 Phương pháp)
- Cách tự động lọc và sao chép hàng hiển thị bằng Excel VBA
- Excel VBA:Loại bỏ Bộ lọc Tự động Nếu Nó Tồn tại (7 Cách)