Nhờ giúp em code để advanced filter trở thành auto filter (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

duocsituan

Thành viên chính thức
Tham gia
10/4/09
Bài viết
52
Được thích
0
Xin chào cả nhà.
Theo file em gởi kèm, mỗi lần em muốn lọc theo điều kiện là phải vào data, chọn advanced thì mới lọc được.
Nhờ các anh chị, các bác giúp em viết đoạn vba thế nào để khi em nhập vào dòng số 2 (tìm kiếm) thì sẽ auto filter ở phần dữ liệu bên dưới luôn.
Luôn tiện xem giúp em các đoạn code thế nào đấy mà khi em lọc xong, clear về dữ liệu ban đầu là máy xử lý vô cùng chậm.
Em xin cám ơn rất nhiều ạ!
 

File đính kèm

Bạn nên xài AdvancedFilter với sự trợ giúp bỡi VBA
(Thật ra mình chỉ có E2003 nên chưa thể biết bạn cần lọc cái gì hết cả.)

Mà file không chậm mới là lạ: Làm chi mà bạn định dạng có điều kiện đến hơn 2.200 dòng chi vậy?
 
Dữ liệu em khoảng trên 2000 thuốc, nhưng em xóa bớt dữ liệu ạ. Vì tránh làm rối câu hỏi.
Em muốn lọc bất kì 1 thông tin nào trong bảng dữ liệu bên dưới.
Chẳng hạn, em lọc "daflon" thì em gõ daflon hoặc *flon vào ô B2, chọn advanced filter, ok. Thì em được dữ liệu bên dưới.
Nhưng ở đây em muốn khi nhập vào ô B2 sẽ xử lý ngay ở bên dưới, em không cần bấm chọn advanced filter nữa. Tức là có sự trợ giúp VBA.
Nhưng vì em chỉ có kiến thức cơ bản nên chẳng thể viết được VBA. Các VBA trong file là em học hỏi từ các file khác trong diễn đàn mình ạ.
Mong anh giúp em với. Thanks
 
Dữ liệu em khoảng trên 2000 thuốc, nhưng em xóa bớt dữ liệu ạ. Vì tránh làm rối câu hỏi.
Em muốn lọc bất kì 1 thông tin nào trong bảng dữ liệu bên dưới.
Chẳng hạn, em lọc "daflon" thì em gõ daflon hoặc *flon vào ô B2, chọn advanced filter, ok. Thì em được dữ liệu bên dưới.
Nhưng ở đây em muốn khi nhập vào ô B2 sẽ xử lý ngay ở bên dưới, em không cần bấm chọn advanced filter nữa. Tức là có sự trợ giúp VBA.
Nhưng vì em chỉ có kiến thức cơ bản nên chẳng thể viết được VBA. Các VBA trong file là em học hỏi từ các file khác trong diễn đàn mình ạ.
Mong anh giúp em với. Thanks
Bạn chọn A6:O2000 menu Home - Style - Format as Table. Nếu cần nhanh thì bấm vào 1 ô trong table, Condition formatting - Clear rules - Clear from table.
Bấm Alt-F11, Thisworkbook, xóa thủ tục trong đó đi.
Thêm code này vào sheet1:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)   
    If Target.Address = "$B$2" Then
        If [B2] = "" Then
            ListObjects("Table1").Range.AutoFilter
        Else
            ListObjects("Table1").Range.AutoFilter 2, "=*" & [B2] & "*"
        End If
    End If
End Sub
 
- Sau khi thử nó bị như hình bên dưới này nè.
- Em clear rules vậy sẽ khó sử dụng bảng tính nên em không clear vẫn được chứ ạ?
- Em muốn lọc ở 1 trong các cột (tên hàng, thành phần, công ty, giá,...) hoặc lọc chính xác ở 2,3 cột chứ không riêng 1 ô B2, vậy thì đoạn code sửa thế nào?
Thanks
 

File đính kèm

  • 1.jpg
    1.jpg
    30.3 KB · Đọc: 21
  • 2.jpg
    2.jpg
    21.4 KB · Đọc: 15
- Sau khi thử nó bị như hình bên dưới này nè.
- Em clear rules vậy sẽ khó sử dụng bảng tính nên em không clear vẫn được chứ ạ?
- Em muốn lọc ở 1 trong các cột (tên hàng, thành phần, công ty, giá,...) hoặc lọc chính xác ở 2,3 cột chứ không riêng 1 ô B2, vậy thì đoạn code sửa thế nào?
Thanks
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
        If Target.Address = "$C$6" Then
            [A7:O65000].ClearContents
            Sheet1.Range("A7:O5000").AdvancedFilter 2, Sheet4.[C5:C6], Sheet4.[A7:O1000]
        End If
    Application.EnableEvents = True
End Sub

Bạn thử dùng sự kiện này xem sao, thay đổi điều kiện lọc ở sheet4.[C5:C6]
Nếu muốn lọc nhiều điều kiện có thể down ATool dùng câu lệnh SQL cũng linh hoạt hơn
 
Lần chỉnh sửa cuối:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
        If Target.Address = "$C$6" Then
            [A7:O65000].ClearContents
            Sheet1.Range("A7:O5000").AdvancedFilter 2, Sheet4.[C5:C6], Sheet4.[A7:O1000]
        End If
    Application.EnableEvents = True
End Sub

Bạn thử dùng sự kiện này xem sao, thay đổi điều kiện lọc ở sheet4.[C5:C6]
Nếu muốn lọc nhiều điều kiện có thể down ATool dùng câu lệnh SQL cũng linh hoạt hơn

Copy đoạn code trên vẫn không thấy điều gi xảy ra. Với lại em muốn lọc auto ngay tại sheet 1 để dễ theo dõi.
Em sẽ thử Atool xem sao, nhưng nhiều chức năng quá, chắc khó.
 
Copy đoạn code trên vẫn không thấy điều gi xảy ra. Với lại em muốn lọc auto ngay tại sheet 1 để dễ theo dõi.
Em sẽ thử Atool xem sao, nhưng nhiều chức năng quá, chắc khó.
Mình chạy vẫn thấy bình thường
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
        If Target.Address = "$B$2" Then
            Range("A7:O5000").AdvancedFilter 1, [B1:B2]
        End If
    Application.EnableEvents = True
End Sub
nếu trong cùng 1 sheet bạn thử lại xem
 
Trong bài 4 của mình cần sửa table từ A6:O2000 thành A7:O2000, chọn My table has header. Khi nhập vào B2 ví dụ tìm Daflon thì bạn chỉ cần nhập daf cũng ra kết quả, không cần nhập dấu *. Còn bạn muốn lọc theo nhiều trường thì cứ mỗi trường thêm 1 lệnh autofilter thôi, những trường dạng số thì phải tìm đúng số đó, những trường text thì tìm gần đúng.
Ví dụ code này lọc gần đúng các cột "tên thuốc", "thành phần", "công ty"; lọc đúng "giá 1" và "giá 2". Các ô nào để trống thì không lọc.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    With ListObjects("Table1").Range
        .AutoFilter
        If [B2] <> "" Then .AutoFilter 2, "=*" & [B2] & "*"
        If [C2] <> "" Then .AutoFilter 3, "=*" & [C2] & "*"
        If [D2] <> "" Then .AutoFilter 4, "=*" & [D2] & "*"
        If [G2] <> 0 Then .AutoFilter 7, [G2]
        If [H2] <> 0 Then .AutoFilter 8, [H2]
    End With
    Application.ScreenUpdating = True
 
End Sub
 
Thanks comet_1701Hau151978. Cả 2 cách đều thành công rồi ạ. Em cũng định dạng lại đến dòng 1500 nên xử lý nhanh rồi ạ.
 
Cả nhà giúp em với ạ, cột J6(như file gởi kèm) lọc tháng năm không được.
Em xin cám ơn rất nhiều!
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom