Hướng dẫn này sẽ giải thích cách sử dụng phương pháp Bộ lọc nâng cao trong VBA
Lọc nâng cao trong Excel rất hữu ích khi xử lý số lượng lớn dữ liệu mà bạn muốn áp dụng nhiều bộ lọc cùng một lúc. Nó cũng có thể được sử dụng để loại bỏ các bản sao khỏi dữ liệu của bạn. Bạn cần phải làm quen với việc tạo Bộ lọc nâng cao trong Excel trước khi cố gắng tạo Bộ lọc nâng cao từ bên trong VBA.
Hãy xem xét bảng tính sau.
Bạn có thể nhìn thoáng qua rằng có những bản sao mà bạn có thể muốn xóa. Loại tài khoản là sự kết hợp của Tiết kiệm, Khoản vay có kỳ hạn và Séc.
Trước tiên, bạn cần thiết lập phần tiêu chí cho bộ lọc nâng cao. Bạn có thể làm điều này trong một trang tính riêng biệt.
Để dễ tham khảo, tôi đã đặt tên bảng dữ liệu của mình là ‘Cơ sở dữ liệu’ và bảng tiêu chí của tôi là ‘Criteria’.
Cú pháp bộ lọc nâng cao
Hành động Expression.AdvancedFilter, CriteriaRange, CopyToRange, Unique
- Các Biểu hiện đại diện cho đối tượng phạm vi - và có thể được đặt dưới dạng Phạm vi (ví dụ: Phạm vi (“A1: A50”) - hoặc Phạm vi có thể được gán cho một biến và biến đó có thể được sử dụng.
- Các Hoạt động đối số là bắt buộc và sẽ là xlFilterInPlace hoặc xlFilterCopy
- Các Phạm vi tiêu chí đối số là nơi bạn đang lấy Tiêu chí để lọc (trang Tiêu chí của chúng tôi ở trên). Điều này là tùy chọn vì bạn sẽ không cần tiêu chí nếu bạn đang lọc các giá trị duy nhất chẳng hạn.
- Các CopyToRange đối số là nơi bạn sẽ đặt kết quả bộ lọc của mình - bạn có thể lọc tại chỗ hoặc bạn có thể sao chép kết quả bộ lọc của mình sang một vị trí thay thế. Đây cũng là một đối số tùy chọn.
- Các Duy nhất đối số cũng là tùy chọn - Thật là chỉ lọc trên các bản ghi duy nhất, Sai là lọc trên tất cả các bản ghi đáp ứng tiêu chí - nếu bạn bỏ qua điều này, mặc định sẽ là Sai.
Lọc dữ liệu tại chỗ
Sử dụng các tiêu chí được hiển thị ở trên trong bảng tiêu chí - chúng tôi muốn tìm tất cả các tài khoản có loại "Tiết kiệm" và "Hiện tại". Chúng tôi đang lọc tại chỗ.
123456789 | Sub CreateAdvancedFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'xác định cơ sở dữ liệu và phạm vi tiêu chíĐặt rngDatabase = Sheets ("Cơ sở dữ liệu"). Phạm vi ("A1: H50")Đặt rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'lọc cơ sở dữ liệu bằng cách sử dụng các tiêu chírngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaKết thúc Sub |
Mã sẽ ẩn các hàng không đáp ứng tiêu chí.
Trong quy trình VBA ở trên, chúng tôi không bao gồm các đối số CopyToRange hoặc Unique.
Đặt lại dữ liệu
Trước khi chạy bộ lọc khác, chúng ta phải xóa bộ lọc hiện tại. Điều này sẽ chỉ hoạt động nếu bạn đã lọc dữ liệu của mình tại chỗ.
12345 | Sub ClearFilter ()Khi có lỗi Tiếp tục tiếp theo'đặt lại bộ lọc để hiển thị tất cả dữ liệuActiveSheet.ShowAllDataKết thúc Sub |
Lọc các giá trị duy nhất
Trong quy trình bên dưới, tôi đã bao gồm đối số Unique nhưng bỏ qua đối số CopyToRange. Nếu bạn bỏ qua lập luận này, bạn MỘT TRONG HAI phải đặt một dấu phẩy làm vị trí cho đối số
123456789 | Sub UniqueValuesFilter1 ()Dim rngDatabase As RangeDim rngCriteria As Range'xác định cơ sở dữ liệu và phạm vi tiêu chíĐặt rngDatabase = Sheets ("Cơ sở dữ liệu"). Phạm vi ("A1: H50")Đặt rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'lọc cơ sở dữ liệu bằng cách sử dụng các tiêu chírngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria ,, TrueKết thúc Sub |
HOẶC bạn cần sử dụng các đối số được đặt tên như hình dưới đây.
123456789 | Sub UniqueValuesFilter2 ()Dim rngDatabase As RangeDim rngCriteria As Range'xác định cơ sở dữ liệu và phạm vi tiêu chíĐặt rngDatabase = Sheets ("Cơ sở dữ liệu"). Phạm vi ("A1: H50")Đặt rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'lọc cơ sở dữ liệu bằng cách sử dụng các tiêu chírngDatabase.AdvancedFilter Action: = xlFilterInPlace, CriteriaRange: = rngCriteria, Unique: = TrueKết thúc Sub |
Cả hai ví dụ mã ở trên sẽ chạy cùng một bộ lọc, như được hiển thị bên dưới - dữ liệu chỉ có các giá trị duy nhất.
Sử dụng đối số CopyTo
123456789 | Sub CopyToFilter ()Dim rngDatabase As RangeDim rngCriteria As Range'xác định cơ sở dữ liệu và phạm vi tiêu chíĐặt rngDatabase = Sheets ("Cơ sở dữ liệu"). Phạm vi ("A1: H50")Đặt rngCriteria = Sheets ("Criteria"). Range ("A1: H3")'sao chép dữ liệu đã lọc sang một vị trí thay thếrngDatabase.AdvancedFilter Action: = xlFilterCopy, CriteriaRange: = rngCriteria, CopyToRange: = Range ("N1: U1"), Unique: = TrueKết thúc Sub |
Lưu ý rằng chúng tôi có thể đã bỏ qua tên của các đối số trong dòng mã Bộ lọc Nâng cao, nhưng việc sử dụng các đối số được đặt tên sẽ làm cho mã dễ đọc và dễ hiểu hơn.
Dòng này dưới đây giống với dòng trong quy trình được hiển thị ở trên.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1: U1"), True |
Khi mã được chạy, dữ liệu gốc vẫn được hiển thị cùng với dữ liệu đã lọc được hiển thị ở vị trí đích được chỉ định trong quy trình.
Xóa bản sao khỏi dữ liệu
Chúng tôi có thể xóa các bản sao khỏi dữ liệu bằng cách bỏ qua đối số Tiêu chí và sao chép dữ liệu sang một vị trí mới.
1234567 | Sub RemoveDuplicates ()Dim rngDatabase As Range'xác định cơ sở dữ liệuĐặt rngDatabase = Sheets ("Cơ sở dữ liệu"). Phạm vi ("A1: H50")'lọc cơ sở dữ liệu thành một phạm vi mới với bộ duy nhất thành truerngDatabase.AdvancedFilter Action: = xlFilterCopy, CopyToRange: = Range ("N1: U1"), Unique: = TrueKết thúc Sub |