T
thanhphuongvip
Guest
Chào mọi người, mình đang sử dụng VBA để tạo cách filter tự động bằng cách gõ từ khóa ở đầu mỗi cột để lọc ra những dữ liệu thỏa mãn 1 hoặc nhiều điều kiện.
Mình không biết cách làm này có tối ưu chưa, hay là còn cách nào hay hơn thì mong các bạn chỉ giáo.
Giả sử mình có bảng chi tiết bán hàng, và mình muốn lọc các cột có màu xanh tương ứng đầu mỗi cột như hình:
Khi đó mình tạo một cột phụ và dùm hàm Seach để tạo vùng điều kiện cho nó, mỗi cột cần filter là một điều kiện, như:
và code cho sheet hiện tại sẽ là:
Hạn chế của cách làm này:
- Chỉ lọc đc theo chuỗi, ko lọc dc theo giá trị như lớn hơn, nhỏ hơn. Ví dụ mình muốn lọc ra hóa đơn lớn hơn 5 (>5) thì không được.
- Phải có các cột điều kiện phụ, rườm rà.
- Khi xóa từ khóa đi thì nó ko về chế độ Showall Data vẫn còn một số cột còn ẩn, như hình:
Để khắc phục điều này thì mình phải thêm nút Xóa Lọc ở trên với code:
Tuy nhiên với dữ liệu vài chục ngàn dòng thì code này chạy rất chậm.
Để rõ hơn các bạn xem file đính kèm:
Các bạn có cách nào hay hơn thì chỉ giáo với!
Xin cảm ơn!
Mình không biết cách làm này có tối ưu chưa, hay là còn cách nào hay hơn thì mong các bạn chỉ giáo.
Giả sử mình có bảng chi tiết bán hàng, và mình muốn lọc các cột có màu xanh tương ứng đầu mỗi cột như hình:
Bạn cần đăng nhập để thấy hình ảnh
Khi đó mình tạo một cột phụ và dùm hàm Seach để tạo vùng điều kiện cho nó, mỗi cột cần filter là một điều kiện, như:
Bạn cần đăng nhập để thấy hình ảnh
và code cho sheet hiện tại sẽ là:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Count > 1 Then Exit Sub
If Target.Address = "$C$8" Or Target.Address = "$D$8" _
Or Target.Address = "$K$8" Or Target.Address = "$A$8" Or Target.Address = "$M$8" Then
Range("A9:M65000").AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Range("$P$7:TS$8"), Unique:=False
End If
Application.ScreenUpdating = True
End Sub
- Chỉ lọc đc theo chuỗi, ko lọc dc theo giá trị như lớn hơn, nhỏ hơn. Ví dụ mình muốn lọc ra hóa đơn lớn hơn 5 (>5) thì không được.
- Phải có các cột điều kiện phụ, rườm rà.
- Khi xóa từ khóa đi thì nó ko về chế độ Showall Data vẫn còn một số cột còn ẩn, như hình:
Bạn cần đăng nhập để thấy hình ảnh
Để khắc phục điều này thì mình phải thêm nút Xóa Lọc ở trên với code:
Mã:
Sub XoaLoc_CTBH()
If Sheet4.FilterMode = False Then Exit Sub
Range("A8").ClearContents
Range("C8").ClearContents
Range("d8").ClearContents
Range("k8").ClearContents
Range("m8").ClearContents
ActiveSheet.ShowAllData
End Sub
Để rõ hơn các bạn xem file đính kèm:
Bạn cần đăng nhập để thấy link
Các bạn có cách nào hay hơn thì chỉ giáo với!
Xin cảm ơn!