Lọc và xóa hàng trong Exel khong dung autofilter

Liên hệ QC

tuanvnconex

Thành viên mới
Tham gia
21/3/08
Bài viết
5
Được thích
0
Mình có một bản dữ liệu, trong đó mình muốn lọc những giá trị #N/A, nhưng mình không muốn dùng Autofilter, mình muống dùng macro, ban nào biết chỉ giáo cho mình nhé. Cảm ơn nhiều
 
Bạn thử dùng code này xem.
Mã:
Sub XoaNA()
On Error Resume Next
Dim D As Range
For Each D In Range("C:C") 'cột có giá trị #N/A
If D = "#N/A" Then
Rows(D.Row).Delete
End If
Next
End Sub
 
Upvote 0
Vẽ ra cho nó lê thê 1 chút.

PHP:
Option Explicit

Sub DelErrCells()
 Dim Rng As Range, Clls As Range, DelRng As Range, eRng As Range
 
 On Error Resume Next
 Set Rng = Selection.CurrentRegion
 Set eRng = Selection.SpecialCells(xlCellTypeFormulas, 16)
 If eRng Is Nothing Then Exit Sub
 For Each Clls In eRng
    If DelRng Is Nothing Then
        Set DelRng = Clls.EntireRow
    Else
        Set DelRng = Union(DelRng, Clls.EntireRow)
    End If
 Next Clls
    DelRng.Delete
 Set DelRng = Nothing
End Sub
 
Upvote 0
Cảm ơn các bạn

Mình đã đungungj được rồi, nhưng phải copy đoạn code nhiều lần mới sử dụng được. Nó chỉ xóa một đoạn thôi.
 
Upvote 0
Lọc #na Và Xóa

BẠN THỬ DÙNG CODE

Sub LOCXOA()
Rows("2:2").Select
Selection.Insert Shift:=xlDown 'THEM DONG TRONG
Range("A2").Select
ActiveCell.FormulaR1C1 = "=MATCH(9999999999999,R[-1]C,1)"
Columns("A:A").Select
Selection.SpecialCells(xlCellTypeFormulas, 16).Select '
Selection.EntireRow.Delete
ActiveWorkbook.Save
End Sub

DÒNG 2 ĐẾN 4,CHỈ ĐỂ PHÒNG HỜ TRONG CỘT A KHÔNG CÒN LỖI #NA MÀ TA VẪN CHẠY MACRO
 
Upvote 0
Nên dùng code của anh SA_DQ vì nó xóa dc tất cả các cell bị lổi, ko riêng gì lổi #NA đâu...
Mặc dù tôi chỉ nắm dc có 80% thuật toán trong code của anh Sa nhưng tôi biết thuật toán này tuyệt chiêu lắm đấy
Với Selection.CurrentRegion: tôi đoán chỉ cần đặt con trỏ trong vùng chứa công thức là dc, ko cần chỉ định chính xác là vùng nào!
Với Selection.SpecialCells(xlCellTypeFormulas, 16): Thì Select tất cả các cell bị lổi... rất hợp lý
Còn Union(DelRng, Clls.EntireRow): thì ko biết, phải nhờ anh Sa giãi thích thêm
ANH TUẤN
 
Upvote 0
Anh Sa ơi cho em hỏi:
Em nghĩ mãi vẫn ko hiểu, tại sao ko là:
Mã:
    Selection.SpecialCells(xlCellTypeFormulas, 16).Select
    Selection.EntireRow.Delete
Cho nó gọn nhỉ?
Đó là xóa dòng, còn như chỉ xóa cell lổi thôi thì:
Mã:
    Selection.SpecialCells(xlCellTypeFormulas, 16).Select
    Selection.Delete
???
ANH TUẤN
 
Upvote 0
anhtuan1066 đã viết:
Anh Sa ơi cho em hỏi:
Em nghĩ mãi vẫn ko hiểu, tại sao ko là:
Mã:
    Selection.SpecialCells(xlCellTypeFormulas, 16).Select
    Selection.EntireRow.Delete
Cho nó gọn nhỉ?
Nếu AnhTuấn phải cắt cổ 3 con gà đang ở 3 tầng lầu, thì AnhTuấn gôm chúng xuống cắt 1 lần hay đến đâu cắt ở đó?!
Vui nha!
Nói thêm: khi phải tìm & xóa dòng thỏa những điều kiện nào đó, thì có người khuyên rằng nên bắt đầu từ dòng cuối trở lên!
Đó là xóa dòng, còn như chỉ xóa cell lổi thôi thì:
Mã:
    Selection.SpecialCells(xlCellTypeFormulas, 16).Select
    Selection.Delete
??? ANH TUẤN
AnhTuấn hoàn toàn có thể thử chút chơi mà! Chú í trước khi thử nên tô màu nền nhạt các ô xung quanh những ô muốn xóa, xem sao?!
Còn Union(DelRng, Clls.EntireRow): thì ko biết, phải nhờ anh Sa giãi thích thêm
Union() là 1 phương thức với Ranges hay cells , nó luôn song hành với phương thức Intersect(); Dùng nó để kết nối (gộp) 2 hay nhiều vùng thành 1 vùng. Trong đoạn mã trên thì hễ trong dòng có ô chứa lỗi thì nối (tất cả các ô trong) hàng đó vô biến DelRng mà ta đã khai báo trước.
Nếu cần ngâm cứu thêm thì tìm bài của mình về Intersect có nói đến phương thức này!

Chúc vui!!
CamChuongR.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
SA_DQ đã viết:
Nếu AnhTuấn phải cắt cổ 3 con gà đang ở 3 tầng lầu, thì AnhTuấn gôm chúng xuống cắt 1 lần hay đến đâu cắt ở đó?!
Anh Sa ơi, em nghĩ anh dùng Union trong bài này là vì anh muốn "gôm" các cell cùng điều kiện vào làm 1, có đúng ko?
Nhưng em thấy trong trường hợp này nó cho phép xóa dòng ngay cả khi mình chọn cell nằm rời rạc cơ mà...
Cái code mà em đưa lên ấy nó vẫn xóa dc bình thường bất kể cell nằm ở đâu... Anh xem lại thử
ANH TUẤN
 
Upvote 0
Dùng Union trong bài này là vì anh muốn "gôm" các cell cùng điều kiện vào làm 1, có đúng ko?
Nhưng em thấy trong trường hợp này nó cho phép xóa dòng ngay cả khi mình chọn cell nằm rời rạc cơ mà...
Cái code mà em đưa lên ấy nó vẫn xóa dc bình thường bất kể cell nằm ở đâu...
Mình nói rồi, chẳng qua như tiêu đề mình nói: cho nó lê thê 1 chút;
Nhưng đó là thận trọng của người già khi xóa dòng (AnhTuấn xem thêm tại đây: http://giaiphapexcel.com/forum/showthread.php?t=8837). Khi xóa dòng,@$@!^% nhiều khi ta không kiểm soát được & bị rơi rớt không chừng! Đề phòng vô ấy náy!
 
Upvote 0
Đúng là kinh nghiệm của các bậc tiền bối ko chê vào đâu dc... Cảm ơn anh về bài học này...
Đọc tài liệu rất khó hình dung vấn đề, chỉ khi bắt tay vào làm tự nhiên sẽ ngộ ra ngay... Tối hôm qua thí nghiệm mới biết Union là cái giống gì... hi.. hi..
Nói chung vẫn còn phải học hỏi nhiều... Hy vọng khi em già như anh thì em có thể làm dc những thứ anh làm dc bây giờ...
(spam cuối tuần... Mod thông cảm nha!)
ANH TUẤN
 
Upvote 0
Web KT

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

Back
Top Bottom