Sửa sai code Filter dựa vào dòng cuối cùng, filter cell trống rồi delete

Liên hệ QC

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,061
Được thích
175
Em có Record macro rồi sửa code lại nhưng code sau khi chạy lần đầu thì đúng, rồi tiếp tục cho chạy lần thứ 2, ... thì cho kết quả sai (bấm vào nút XÓA liên tiếp nhiều lần)
Mục đích của em như sau:
1/ Xác định dòng cuối ở cột của cột D => mục đích là để Filter từ dòng 15 đến dòng cuối cột D (chỉ filter đến dòng cuối cùng của cột D)
2/ Filer cột F, nếu cell trống thì delete cả dòng
Em thử nghiệm lần đầu code chạy đúng nhưng tiếp tục chạy code thì kết quả sai
Nhờ anh/chị & các bạn hướng dẫn chỗ sai
Xin cảm ơn!

Mã:
Sub Filter_Xoa()
    On Error Resume Next
    Dim lr As Long
    lr = Range("D" & Rows.Count).End(xlUp).Row
    MsgBox lr
    If lr < 15 Then MsgBox lr: Exit Sub
    Range("A14:N" & lr).Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$14:$N$" & lr).AutoFilter Field:=6, Criteria1:="="
    Rows("15:" & lr).Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.ShowAllData
End Sub
 

File đính kèm

Anh chị phân tích giúp em tìm lỗi sai của bài trên ạ!
 
Upvote 0
Anh chị phân tích giúp em tìm lỗi sai của bài trên ạ!
Không có thời gian để phân tích đâu, bạn xài tạm cái này coi có chạy được không.
PHP:
Sub Xoa()
Dim I As Long, R As Long
R = Range("D50000").End(xlUp).Row
If R < 15 Then Exit Sub
For I = R To 15 Step -1
    If Range("F" & I) = Empty Then Range("F" & I).EntireRow.Delete
Next I
End Sub
 
Upvote 0
Không có thời gian để phân tích đâu, bạn xài tạm cái này coi có chạy được không.
PHP:
Sub Xoa()
Dim I As Long, R As Long
R = Range("D50000").End(xlUp).Row
If R < 15 Then Exit Sub
For I = R To 15 Step -1
    If Range("F" & I) = Empty Then Range("F" & I).EntireRow.Delete
Next I
End Sub
Bạn này không dùng kiểu này đâu thầy ạ.Vì nó lâu.Lần trước giới thiệu rồi.Không dùng.
 
Upvote 0
Em có Record macro rồi sửa code lại nhưng code sau khi chạy lần đầu thì đúng, rồi tiếp tục cho chạy lần thứ 2, ... thì cho kết quả sai (bấm vào nút XÓA liên tiếp nhiều lần)
Mục đích của em như sau:
1/ Xác định dòng cuối ở cột của cột D => mục đích là để Filter từ dòng 15 đến dòng cuối cột D (chỉ filter đến dòng cuối cùng của cột D)
2/ Filer cột F, nếu cell trống thì delete cả dòng
Em thử nghiệm lần đầu code chạy đúng nhưng tiếp tục chạy code thì kết quả sai
Nhờ anh/chị & các bạn hướng dẫn chỗ sai
Xin cảm ơn!

Mã:
Sub Filter_Xoa()
    On Error Resume Next
    Dim lr As Long
    lr = Range("D" & Rows.Count).End(xlUp).Row
    MsgBox lr
    If lr < 15 Then MsgBox lr: Exit Sub
    Range("A14:N" & lr).Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$14:$N$" & lr).AutoFilter Field:=6, Criteria1:="="
    Rows("15:" & lr).Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.ShowAllData
End Sub
Dùng code mới
Mã:
Sub Filter_Xoa()
    Dim lr As Long, i As Long
    lr = Range("D" & Rows.Count).End(xlUp).Row
    MsgBox lr
    If lr < 15 Then MsgBox lr: Exit Sub
    If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False
    Range("A14:N" & lr).AutoFilter Field:=6, Criteria1:="="
    On Error Resume Next
    i = Range("A15:N" & lr).SpecialCells(xlCellTypeVisible).Rows.Count
    If Err.Number = 0 Then Range("A15:N" & lr).Delete Shift:=xlUp
    ActiveSheet.ShowAllData
End Sub
 
Upvote 0
Anh chị phân tích giúp em tìm lỗi sai của bài trên ạ!
thêm dòng này vào trước lệnh xóa (delete)
MsgBox "selection.address=" & Selection.Address

sẽ hiểu ngay (sau khi chạy lần 1 lần 2),

Vì xóa lần 2, thì vùng được filter ẩn hết (không có dòng thỏa mãn điều kiện trống) --> cells visible không có --> vùng chọn vẫn giữ nguyên nên bị xóa sạch
Bài đã được tự động gộp:

Bạn này không dùng kiểu này đâu thầy ạ.Vì nó lâu.Lần trước giới thiệu rồi.Không dùng.
Tôi nghĩ người hỏi này muốn học hỏi, tự học - nên đó là hướng tốt, hơn một số chỉ thích có bánh bao ngay trị đói
 
Upvote 0
Em có Record macro rồi sửa code lại nhưng code sau khi chạy lần đầu thì đúng, rồi tiếp tục cho chạy lần thứ 2, ... thì cho kết quả sai (bấm vào nút XÓA liên tiếp nhiều lần)
Mục đích của em như sau:
1/ Xác định dòng cuối ở cột của cột D => mục đích là để Filter từ dòng 15 đến dòng cuối cột D (chỉ filter đến dòng cuối cùng của cột D)
2/ Filer cột F, nếu cell trống thì delete cả dòng
Em thử nghiệm lần đầu code chạy đúng nhưng tiếp tục chạy code thì kết quả sai
Nhờ anh/chị & các bạn hướng dẫn chỗ sai
Xin cảm ơn!

Mã:
Sub Filter_Xoa()
    On Error Resume Next
    Dim lr As Long
    lr = Range("D" & Rows.Count).End(xlUp).Row
    MsgBox lr
    If lr < 15 Then MsgBox lr: Exit Sub
    Range("A14:N" & lr).Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$14:$N$" & lr).AutoFilter Field:=6, Criteria1:="="
    Rows("15:" & lr).Select
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Delete Shift:=xlUp
    ActiveSheet.ShowAllData
End Sub
Sửa vầy nha
Mã:
Sub Filter_Xoa()
    On Error Resume Next
    ActiveSheet.ShowAllData
    Dim lr As Long
    lr = Range("D" & Rows.Count).End(xlUp).Row
    MsgBox lr
    If lr < 15 Then MsgBox lr: Exit Sub
    Range("I14:I" & lr).SpecialCells(4).EntireRow.Delete    
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom