Lọc AutoFilter nhiều điều kiện bằng VBA

Liên hệ QC

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
934
Được thích
568
Xin chào anh chị em GPE
Em có nhu cầu lọc dữ liệu tại chỗ bằng VBA như file đính kèm.
Autofilter thực ra đã làm rất tốt nhiệm vụ của nó và nhu cầu của em. Tuy nhiên quá trình sử dụng nếu dùng VBA thì sẽ hiệu quả hơn, vì thế em nhờ các anh chị em giúp phần lọc như file đính kèm
Em đã thử record macro nhưng khi cho chạy bằng code mà mình record thì thấy lỗi không rõ nguyên nhân,
Vậy rất mong được mọi người giúp đỡ phần code để lọc dữ liệu. Cụ thể là khi người dùng nhập dữ liệu điều kiện lọc tại 1 trong các ô C2; C3; D3; E3; F3 là code chạy ngay. Nếu kết quả lọc không có hoặc điều kiện lọc sai thì hiện Thông báo.
Xin chân thành cảm ơn
 

File đính kèm

  • Hoi GPE - AutoFilter.xlsb
    59.1 KB · Đọc: 45
Xin chào anh chị em GPE
Em có nhu cầu lọc dữ liệu tại chỗ bằng VBA như file đính kèm.
Autofilter thực ra đã làm rất tốt nhiệm vụ của nó và nhu cầu của em. Tuy nhiên quá trình sử dụng nếu dùng VBA thì sẽ hiệu quả hơn, vì thế em nhờ các anh chị em giúp phần lọc như file đính kèm
Em đã thử record macro nhưng khi cho chạy bằng code mà mình record thì thấy lỗi không rõ nguyên nhân,
Vậy rất mong được mọi người giúp đỡ phần code để lọc dữ liệu. Cụ thể là khi người dùng nhập dữ liệu điều kiện lọc tại 1 trong các ô C2; C3; D3; E3; F3 là code chạy ngay. Nếu kết quả lọc không có hoặc điều kiện lọc sai thì hiện Thông báo.
Xin chân thành cảm ơn
Tạo 1 vùng điều kiện lọc rồi thử với Advanced Filter coi sao.
 

File đính kèm

  • Ad_Filter.xlsb
    57.8 KB · Đọc: 140
Upvote 0
Tạo 1 vùng điều kiện lọc rồi thử với Advanced Filter coi sao.
Cảm ơn bác Ba Tê. Bác xem thêm giúp em
1. Giải pháp của bác chạy tốt ạ. Tuy nhiên khi em thử >10 lần cho những tình huống khác nhau thì vẫn gặp vài lần lỗi. Chưa rõ nguyên nhân.
2. Có thể nào đưa việc chuyển vùng điều kiện N2:R2 vào trong code để tránh việc người dùng vô tinh xóa dòng này thì code sẽ tự sinh ra
3. Làm thế nào để ngay sau khi nhập liệụ tại 1 trong các ô C3:F3 là việc code filter chạy ngay.
Trân trọng cảm ơn
 
Upvote 0
Cảm ơn bác Ba Tê. Bác xem thêm giúp em
1. Giải pháp của bác chạy tốt ạ. Tuy nhiên khi em thử >10 lần cho những tình huống khác nhau thì vẫn gặp vài lần lỗi. Chưa rõ nguyên nhân.
2. Có thể nào đưa việc chuyển vùng điều kiện N2:R2 vào trong code để tránh việc người dùng vô tinh xóa dòng này thì code sẽ tự sinh ra
3. Làm thế nào để ngay sau khi nhập liệụ tại 1 trong các ô C3:F3 là việc code filter chạy ngay.
Trân trọng cảm ơn
1/ Nói không chứng nên không biết lỗi khi nào, vì sao.
2/Chuyện dễ như "cơm bữa".
3/ 5 ô điều kiện, chỉ cần thay đổi 1 ô (chưa đúng yêu cầu mình muốn) là code chạy 1 lần, có phải là "mắc giỡn" quá không?
 
Upvote 0
1/ Nói không chứng nên không biết lỗi khi nào, vì sao.
2/Chuyện dễ như "cơm bữa".
3/ 5 ô điều kiện, chỉ cần thay đổi 1 ô (chưa đúng yêu cầu mình muốn) là code chạy 1 lần, có phải là "mắc giỡn" quá không?
Trước hết xin lỗi bác @Ba Tê vì em phản hồi chậm
1. Em gửi file mà bị lỗi không filter được theo link phía dưới
2. Nhờ bác ra tay giúp
3. Việc nhập 1 ô là code chạy, việc này là hữu ích vì người dùng sẽ dừng gõ từ khóa khi thấy kết quả cần tìm thay vì phải gõ đủ

Mong bác tiếp tục chỉ dẫn. Trân trọng cảm ơn

Links tải file:
https://dl.dropboxusercontent.com/c...337529492&_notify_domain=www.dropbox.com&dl=1
 
Upvote 0
Xin cảm ơn anh @befaint
Code hoạt động đúng ý và mượt mà.
Xin hỏi thêm các anh là: Bổ sung code như nào để khi tác động lên ô C2 hoặc C3, Excel nó nhanh nhảu lọc không trùng cột F và gán các giá trị vào 1 Name hoặc dán giá trị vào 1 cột trung gian nhằm làm Validation để dễ dàng cho việc chọn lựa ở ô C2 và C3
Xin cảm ơn các anh chị
 
Upvote 0
Đến đây là kết thúc chủ đề này.
Các vấn đề khác thì đăng bài mới.
Việc đăng bài mới thì không có gì ngại anh ạ.
Tuy nhiên ở bài mới mà người mới giúp đỡ, họ tạo sub mới... Nếu người nhờ giúp với trình độ hạn chế thì kết quả là họ nhận được là bữa lẩu code trong file hoặc code có sự trùng lặp về câu lệnh.
Lý do em không đưa liền tù tì tất cả các vấn đề là vì nếu đưa ra và nhận được giúp đỡ thì chưa chắc hiểu được code do code thực hiện nhiều lệnh khác nhau. Hơn nữa nếu người hỏi đưa hàng loạt các yêu cầu thì không phải cao thủ nào cũng đủ rảnh rỗi xử lý hết yêu cầu của mình ngay 1 lúc.
Rất mong được các anh chị em tiếp tục hỗ trợ và trau dồi
Trân trọng
 
Upvote 0
Gợi ý cho bài #7:
- Tìm code lọc loại trùng 1 cột (sử dụng Dictionary chẳng hạn) để áp dụng cho cột F, được một mảng kết quả arr;
- Record macro cách gán Data Validation vào một cell, rồi thay list của Data Validation là mảng arr;
- Tạo một Sub cho các công đoạn trên (Sub LocCotF()));
- Gán sub LocCotF vào một nút lệnh để chạy khi cần hoặc cho vào sự kiện Workbook_Open(), chứ không nên cho vào sự kiện ở C2, C3 (chạy mệt).
 
Upvote 0
Xin cảm ơn anh @befaint
Code hoạt động đúng ý và mượt mà.
Xin hỏi thêm các anh là: Bổ sung code như nào để khi tác động lên ô C2 hoặc C3, Excel nó nhanh nhảu lọc không trùng cột F và gán các giá trị vào 1 Name hoặc dán giá trị vào 1 cột trung gian nhằm làm Validation để dễ dàng cho việc chọn lựa ở ô C2 và C3
Xin cảm ơn các anh chị
Sao tôi thấy file bài 6 chưa đúng ý bài 1 ta.
--
Yêu cầu bổ sung thì thêm 1 sheet có code name là Sheet1 rồi copy code này vào module. Muốn tự động thì thêm dòng gọi thủ tục này trong thủ tục sự kiện
Mã:
Sub Macro1()
With Sheet1
    .Cells(2, 2).Formula = "=AND(NK!F6>=NK!$C$2,NK!F6<=NK!$C$3)"
    Sheets("NK").Range("F5:F1000").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=.Range("B1:B2"), CopyToRange:=.Range("A1"), Unique:=True
End With
End Sub
 
Upvote 0
Web KT
Back
Top Bottom