Tính năng AutoFilter của Excel thực sự hiệu quả để trích xuất dữ liệu dựa trên điều kiện nhất định. Triển khai VBA là phương pháp hiệu quả, nhanh nhất và an toàn nhất để chạy bất kỳ thao tác nào trong Excel. Trong bài viết này, chúng tôi sẽ chỉ cho bạn 4 phương pháp để AutoFilter với nhiều tiêu chí trên cùng một trường (cột) trong Excel với macro VBA.
Tải xuống sổ làm việc
Bạn có thể tải xuống sổ làm việc Excel thực hành miễn phí từ đây.
4 phương pháp VBA để AutoFilter với nhiều tiêu chí trên cùng trường (cột) trong Excel
Theo dõi phần này, bạn sẽ học cách AutoFilter với nhiều văn bản và giá trị số, với toán tử AND và OR trên cùng một cột trong Excel với VBA theo 4 tiêu chí khác nhau.
1. Nhúng VBA để AutoFilter với nhiều tiêu chí số trên cùng một cột
Xem xét bộ dữ liệu sau. Cột B bao gồm một số Số ngẫu nhiên, trong khi Cột D chỉ chứa Số lẻ. Điều chúng ta sẽ làm ở đây là, chúng ta sẽ lọc Cột B dựa trên tiêu chí nằm trong Cột D; nghĩa là, Số ngẫu nhiên (Cột B) sẽ được lọc theo Số lẻ với tiêu chí bao gồm và nằm giữa các số nằm trong Cột D.

Hãy xem cách làm điều đó với VBA trong Excel.
Các bước:
- Ban đầu, nhấn Alt + F11 trên bàn phím hoặc vào tab Nhà phát triển -> Visual Basic để mở Trình soạn thảo Visual Basic.

- Tiếp theo, trong cửa sổ mã bật lên, từ thanh menu, nhấp Chèn -> Mô-đun.

- Sau đó, sao chép mã sau và dán vào cửa sổ mã.
Sub AutoFilterWithMultipleCriteriaOnSameColumn() Dim iArray As Variant With ThisWorkbook.Worksheets("Column") iArray = Split(Join(Application.Transpose(.Range(.Cells(5, 4), .Cells(.Range("D:D").Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row, 4)).Value))) .Range("B4").AutoFilter Field:=1, Criteria1:=iArray, Operator:=xlFilterValues End With End Sub
Mã của bạn giờ đã sẵn sàng chạy.

- Bây giờ, nhấn F5 trên bàn phím hoặc từ thanh menu chọn Chạy -> Chạy Sub/UserForm. Bạn cũng có thể chỉ nhấp vào biểu tượng Chạy nhỏ trong thanh menu con để chạy macro.

Sau khi thực thi mã thành công, hãy nhìn hình ảnh sau để xem kết quả.

Như bạn thấy từ hình ảnh trên, Cột B hiện đã được lọc chỉ với các số lẻ.
Bạn có thể thực hiện cùng mã để lọc dữ liệu dựa trên số chẵn. Trong trường hợp đó, bạn chỉ cần lưu các số chẵn vào một cột khác thay vì số lẻ.
Giải thích mã VBA
Dim iArray As Variant
Định nghĩa biến cho mảng.
With ThisWorkbook.Worksheets("Column")
Khai báo tên trang tính ("Column" là tên trang tính cho bộ dữ liệu của chúng ta). Bạn phải viết tên trang tính theo bộ dữ liệu của bạn.
iArray = Split(Join(Application.Transpose(.Range(.Cells(5, 4), .Cells(.Range("D:D").Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row, 4)).Value)))
Điền mảng đã định nghĩa với tiêu chí lưu trữ trong Cột D bắt đầu từ Ô D5.
.Range("B4").AutoFilter Field:=1, Criteria1:=iArray, Operator:=xlFilterValues End With
- Lọc Cột B bắt đầu từ Ô B4 theo nhiều tiêu chí lưu trữ trong mảng đã định nghĩa.
- Sau đó, rời khỏi trang tính.
Đọc thêm: Excel VBA kiểm tra xem AutoFilter có bật không (4 cách dễ dàng)
2. Triển khai VBA để AutoFilter với toán tử AND trên cùng cột trong Excel
Toán tử xlAND trong Excel hoạt động với hai tiêu chí. Nó trả về các giá trị thỏa mãn cả hai tiêu chí.
Bây giờ, xem xét bộ dữ liệu sau. Cột B bao gồm Số ngẫu nhiên, và chúng ta chèn hai điều kiện trong phạm vi D4:E5. Các điều kiện là Cột B phải được lọc với các số Lớn hơn hoặc Bằng 2 (giá trị lưu trong Ô E4) và Nhỏ hơn hoặc Bằng 9 (giá trị lưu trong Ô E5). Chúng ta sẽ lọc Cột B theo những điều kiện đó với Toán tử AND trong Excel VBA.

Các bước để thực hiện được đưa ra dưới đây.
Các bước:
- Cùng cách như trước, mở Trình soạn thảo Visual Basic từ tab Nhà phát triển và Chèn một Mô-đun trong cửa sổ mã.
- Sau đó, sao chép mã sau và dán vào cửa sổ mã.
Sub AutoFilterOnSameColumnWithAND() With ThisWorkbook.Worksheets("AND") .Range("B4").AutoFilter Field:=1, Criteria1:=">=" & .Range("E4").Value, Operator:=xlAnd, Criteria2:="<=" & .Range("E5").Value End With End Sub
Mã của bạn giờ đã sẵn sàng chạy.

- Sau đó, Chạy macro như chúng tôi đã chỉ ở phần trên. Kết quả hiển thị trong hình ảnh dưới đây.

Sau khi thực thi mã thành công, Cột B được lọc với các giá trị từ 2 đến 9, thỏa mãn cả hai điều kiện.
Giải thích mã VBA
With ThisWorkbook.Worksheets("AND") .Range("B4").AutoFilter Field:=1, Criteria1:=">=" & .Range("E4").Value, Operator:=xlAnd, Criteria2:="<=" & .Range("E5").Value End With
Đoạn mã này,
- Trước tiên khai báo tên trang tính mà chúng ta sẽ làm việc ("AND" là tên trang tính cho bộ dữ liệu của chúng ta). Bạn phải viết tên trang tính theo bộ dữ liệu của bạn.
- Sau đó, lọc Cột B bắt đầu từ Ô B4 theo nhiều tiêu chí lưu trữ trong Ô E4 và E5 với toán tử xlAnd.
- Sau đó, rời khỏi trang tính.
Đọ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)
3. Áp dụng Macro để AutoFilter với toán tử OR trên cùng cột trong Excel
Toán tử xlOR trong Excel hoạt động với hai tiêu chí. Khác với xlAND, nó trả về các giá trị thỏa mãn bất kỳ tiêu chí nào.
Bây giờ, xem xét bộ dữ liệu sau. Cột B bao gồm Số ngẫu nhiên, và chúng ta chèn hai điều kiện trong phạm vi D4:E5. Các điều kiện là Cột B phải được lọc với các số Lớn hơn hoặc Bằng 12 (giá trị lưu trong Ô E4) hoặc Nhỏ hơn hoặc Bằng 7 (giá trị lưu trong Ô E5). Chúng ta sẽ lọc Cột B theo những điều kiện đó với Toán tử OR trong Excel VBA.

Hãy xem các bước làm thế nào.
Các bước:
- Như đã chỉ trước, mở Trình soạn thảo Visual Basic từ tab Nhà phát triển và Chèn một Mô-đun trong cửa sổ mã.
- Sau đó, sao chép mã sau và dán vào cửa sổ mã.
Sub AutoFilterOnSameColumnWithOR() With ThisWorkbook.Worksheets("OR") .Range("B4").AutoFilter Field:=1, Criteria1:="<" & .Range("E5").Value, Operator:=xlOr, Criteria2:=">" & .Range("E4").Value End With End Sub
Mã của bạn giờ đã sẵn sàng chạy.

- Sau đó, Chạy macro và xem hình ảnh sau để thấy đầu ra.

Sau khi thực thi mã thành công, Cột B được lọc với các giá trị lớn hơn hoặc bằng 12 hoặc nhỏ hơn hoặc bằng 7.
Giải thích mã VBA
With ThisWorkbook.Worksheets("OR") .Range("B4").AutoFilter Field:=1, Criteria1:="<" & .Range("E5").Value, Operator:=xlOr, Criteria2:=">" & .Range("E4").Value End With
Đoạn mã này,
- Trước tiên khai báo tên trang tính mà chúng ta sẽ làm việc ("OR" là tên trang tính cho bộ dữ liệu của chúng ta). Bạn phải viết tên trang tính theo bộ dữ liệu của bạn.
- Sau đó, lọc Cột B bắt đầu từ Ô B4 theo nhiều tiêu chí lưu trữ trong Ô E4 và E5 với toán tử xlOr.
- Sau đó, rời khỏi trang tính.
Đọc thêm: Cách tự động lọc và sao chép hàng hiển thị với Excel VBA
4. Nhúng VBA để AutoFilter dựa trên nhiều giá trị văn bản trên cùng trường
Nhìn vào bộ dữ liệu sau. Cột B bao gồm Tên quốc gia. Chúng ta sẽ lọc cột này dựa trên quốc gia mà chúng ta sẽ hardcode trong macro. Chúng ta sẽ AutoFilter cột dựa trên hai tên quốc gia, Úc và Anh.

Các bước thực hiện được đưa ra dưới đây.
Các bước:
- Trước tiên, mở Trình soạn thảo Visual Basic từ tab Nhà phát triển và Chèn một Mô-đun trong cửa sổ mã.
- Sau đó, sao chép mã sau và dán vào cửa sổ mã.
Sub AutoFilterOnSameColumnWithMultipleTexts() Dim iArray As Variant iArray = Array("Australia", "England") Range("B4", Range("B" & Rows.Count).End(xlUp)).AutoFilter 1, iArray, xlFilterValues, , 0 End Sub
Mã của bạn giờ đã sẵn sàng chạy.

- Tiếp theo, Chạy macro. Bây giờ, xem hình ảnh sau để thấy kết quả.

Kết quả, Cột B vốn chứa nhiều quốc gia giờ đã được lọc chỉ với hai tên quốc gia – Úc và Anh – mà chúng ta cung cấp trong mã.
Giải thích mã VBA
Dim iArray As Variant
Định nghĩa biến cho mảng.
iArray = Array("Australia", "England")
Lưu trữ tiêu chí văn bản dựa trên đó lọc sẽ được thực hiện trong mảng đã định nghĩa.
Range("B4", Range("B" & Rows.Count).End(xlUp)).AutoFilter 1, iArray, xlFilterValues, , 0
Lọc Cột B bắt đầu từ Ô B4 theo nhiều tiêu chí văn bản hardcode trong mảng đã định nghĩa.
Đọc thêm: Cách tự động lọc giá trị không bằng giá trị nhất định với VBA trong Excel
Kết luận
Để kết luận, bài viết này đã chỉ cho bạn 4 phương pháp để AutoFilter với nhiều tiêu chí trên cùng trường (cột) trong Excel với macro VBA. Tôi hy vọng bài viết này đã rất hữu ích cho bạn. Đừng ngần ngại hỏi bất kỳ câu hỏi nào về chủ đề này.
Bài viết liên quan
- VBA AutoFilter: Sắp xếp từ nhỏ đến lớn (3 phương pháp)
- Excel VBA: Xóa AutoFilter nếu tồn tại (7 ví dụ)