Trong bài viết này, tôi sẽ chỉ cho bạn cách 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 để tự động lọc giá trị từ phạm vi ô đã chọn, cũng như từ toàn bộ trang tính.
Tự động lọc giá trị không bằng 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 phù hợp để tự động lọc giá trị không bằng giá trị nhất định với VBA trong Excel
Không chần chừ thêm, hãy đến thảo luận chính hôm nay. Trước tiên, chúng ta sẽ tự động lọc giá trị từ toàn bộ trang tính, sau đó từ phạm vi cụ thể của trang tính.
1. Tự động lọc giá trị không bằng giá trị nhất định từ toàn bộ trang tính
Trước hết, chúng ta sẽ học để 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 tên Sheet1 chứa tên một số học sinh, điểm của họ trong một bài kiểm tra và xếp loại của họ. Bộ dữ liệu bắt đầu ngay từ ô A1.

Mục tiêu của chúng ta là tự động lọc các học sinh đạt xếp loại không bằng F trong trang tính tên Sheet2.
⧪ Bước 1: Chèn đầu vào
Trước tiên, bạn phải chèn các đầu vào vào mã. Điều này bao gồm tên trang tính nguồn (Sheet1), trang tính đích (Sheet2), các 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 giá trị với vòng lặp For
Tiếp theo, chúng ta sẽ tự động lọc giá trị từ trang tính nguồn sang trang tính đích bằng cách lặp qua một vòng lặp for.
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 đó, mã VBA hoàn chỉnh 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 đầu vào theo nhu cầu của bạn, sau đó chạy mã (Trước tiên tạo trang tính mới tên Sheet2, hoặc bất cứ thứ gì làm trang tính đích, sau đó chạy mã. Nếu không, nó sẽ báo lỗi.).
Bạn sẽ nhận được các cột cụ thể của bộ dữ liệu (Cột 1 và 3 trong ví dụ này) tự động lọc sang 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 AutoFilter với nhiều tiêu chí trên cùng trường trong Excel (4 phương pháp)
2. Tự động lọc giá trị không bằng giá trị nhất định từ phạm vi ô cụ thể với Excel VBA
Chúng ta đã học để tự động lọc giá trị không bằng giá trị nhất định từ toàn bộ trang tính trong Excel VBA.
Bây giờ chúng ta sẽ học để tự động lọc giá trị từ phạm vi cụ thể.
Ở đây tôi có một trang tính tên Sheet3 lại chứa tên một số học sinh, điểm của họ trong bài kiểm tra và xếp loại. Nhưng lần này bộ dữ liệu bắt đầu từ ô B3 đến ô D15.

Lần này mục tiêu là tự động lọc học sinh đạt xếp loại không bằng F trong cùng trang tính, tại ô F3.
⧪ Bước 1: Chèn đầu vào
Trước tiên, bạn phải chèn đầu vào vào mã. Lần này sẽ bao gồm tên trang tính nguồn (Sheet3), trang tính đích (Sheet3), ô đích (F3), các 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 giá trị với vòng lặp For
Tiếp theo, chúng ta sẽ tự động lọc giá trị bằng cách lặp qua vòng lặp for.
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 đó, mã VBA hoàn chỉnh 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 nếu là trang 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 bộ dữ liệu (Cột 1 và 3 trong ví dụ này) tự động lọc đến ô đí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: [Sửa lỗi]: Phương pháp AutoFilter của lớp Range thất bại (5 giải pháp)
Lưu ý quan trọng
Trước khi chạy mã để tự động lọc giá trị sang trang tính mới, hãy tạo trang tính đó. Nếu không, bạn sẽ gặp lỗi.
Cũng ở đây chúng ta đã dùng thuộc tính UsedRange của VBA để tự động lọc giá trị từ toàn bộ trang tính. Nhấp vào nó để biết chi tiết.
Kết luận
Vậy, đây là các cách để tự động lọc giá trị không bằng giá trị nhất định sử dụng VBA trong Excel. Bạn có câu hỏi nào? Đừng ngần ngại hỏi chúng tôi. Và đừng quên truy cập trang web ExcelDemy để xem thêm bài viết và cập nhật.
Bài viết liên quan
- Excel VBA kiểm tra xem AutoFilter có bật không (4 cách dễ dàng)
- VBA AutoFilter: Sắp xếp từ nhỏ đến lớn (3 phương pháp)
- Cách tự động lọc và sao chép hàng hiển thị với Excel VBA
- Excel VBA: Xóa AutoFilter nếu tồn tại (7 cách)