Xoá vùng lọc trong Excel

  • Thread starter Thread starter rosy84
  • Ngày gửi Ngày gửi
Liên hệ QC

rosy84

Thành viên hoạt động
Tham gia
15/3/09
Bài viết
170
Được thích
38
Các bác giúp em viết macro xoá vùng lọc trong Excel với.

Em nghĩ mãi mà không tìm được cách nào cả. Em cũng dùng Recoder macro nhưng khi chạy với

dữ liệu khác nhau thì bị sai mất. Em có gửi kèm file mong các bác giúp nhé !
 

File đính kèm

Các bác giúp em viết macro xoá vùng lọc trong Excel với.

Em nghĩ mãi mà không tìm được cách nào cả. Em cũng dùng Recoder macro nhưng khi chạy với

dữ liệu khác nhau thì bị sai mất. Em có gửi kèm file mong các bác giúp nhé !
Có 3 kiểu xóa như thế này:
1> Chỉ clear dữ liệu
PHP:
Sub Test1()
  With ActiveSheet.AutoFilter.Range
    Intersect(.Offset(1), .Cells).SpecialCells(12).ClearContents
    .Parent.ShowAllData
  End With
End Sub
2> Xóa dữ liệu và xóa luôn dòng
PHP:
Sub Test2()
  With ActiveSheet.AutoFilter.Range
    Intersect(.Offset(1), .Cells).SpecialCells(12).EntireRow.Delete
    .Parent.ShowAllData
  End With
End Sub
3> Xóa dữ liệu và "đôn" dòng dưới lên trên
PHP:
Sub Test3()
  Dim TmpRng As Range
  With ActiveSheet.AutoFilter.Range
    Set TmpRng = Intersect(.Offset(1), .Cells).SpecialCells(12)
    .Parent.ShowAllData
    TmpRng.Delete 2
  End With
End Sub
Tùy bạn chọn
 
Lần chỉnh sửa cuối:
Upvote 0
Em dùng vào công việc của em thì thấy khôg được bác ạ. Nếu vùng chọn mà lớn thì nó không thực hiện được.

Vậy có giải pháp nào không bác ?

Khi em dùng với vùng lớn thì em dùng câu lệnh này khôg biết bác cảm thấy có vấn đề gì không?

With ActiveSheet.AutoFilter.Range
Intersect(.Offset(1), .Cells).EntireRow.Delete
.Parent.ShowAllData
End With

Nhưng em thấy nó chạy đúng bác ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Em dùng vào công việc của em thì thấy khôg được bác ạ. Nếu vùng chọn mà lớn thì nó không thực hiện được.

Vậy có giải pháp nào không bác ?
Đúng rồi, đó là giới hạn của SpecialCells ---> Với vùng lọc lớn thì SpecialCells "mất đường bay" luôn
Có 1 cách khác: Dùng Advanced Filter ---> thay vì xóa vùng dữ liệu đang lọc, ta lọc các giá trị đang ẩn sang 1 sheet mới, xong ta xóa toàn bộ dữ liệu cũ
Ví dụ code này:
PHP:
Sub DeleteFilterData()
  With Sheet1.Range("A5").CurrentRegion
    .AdvancedFilter 2, .Parent.Range("I1:J2"), Sheet2.Range("A1")
  End With
End Sub
Trong đó I1:J2 là vùng điều kiện
- Dữ liệu lọc sẽ đặt tại sheet2
---------------------
Code mà bạn đề xuất:
PHP:
With ActiveSheet.AutoFilter.Range
        Intersect(.Offset(1), .Cells).EntireRow.Delete
        .Parent.ShowAllData
    End With
Chạy trên Excel 2003 không có vấn đề nhưng với Excel 2007 thì.. coi chừng ---> Có trường hợp nó sẽ xóa sạch dữ liệu của bạn đấy (chính vì lẽ đó mà tôi cẩn thận, phải dùng đến SpecialCells cho chắc ăn)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Đúng vậy đó bác ạ, chạy trên excel 2007 lúc thì OK lúc thì nó xoá hết cả, e cũng không hiểu nổi.

Em nghĩ cách của bác cũng hay, nhưng tôi nay em sẽ nghĩ và ngay mai sẽ up lên cách mới bác xem thế nào nhé.

Rồi tiện thể hỏi luôn bác vài vấn đề nữa.
 
Upvote 0
Đúng vậy đó bác ạ, chạy trên excel 2007 lúc thì OK lúc thì nó xoá hết cả, e cũng không hiểu nổi.

Em nghĩ cách của bác cũng hay, nhưng tôi nay em sẽ nghĩ và ngay mai sẽ up lên cách mới bác xem thế nào nhé.

Rồi tiện thể hỏi luôn bác vài vấn đề nữa.
Để có thể chạy được trên Excel 2007 mà không bị sự cố thì bạn phải đặc biệt chú ý thao tác AutoFilter
- Bạn phải quét chọn toàn bộ dữ liệu rồi mới filter
- Nếu bạn chỉ quét chọn tiêu đề và filter thì code sẽ chạy sai
Bạn nên xem qua topic này để biết nguyên nhân:
Copy dữ liệu sau khi dùng Auto Filter

 
Upvote 0
Web KT

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

Back
Top Bottom