Xóa dòng trống kèm điều kiện

Liên hệ QC

hadoan-pap

Thành viên tiêu biểu
Tham gia
8/7/15
Bài viết
453
Được thích
18
Dear mọi ng.

Em có them 1 bài toán nhỏ như file đính kèm ạ.

Em muốn chạy hết hang của cột B và cột D để xóa bỏ những dòng trống bên dưới kèm điều kiện là cả 2 hang của cột B và D cùng rỗng thì nó mới xóa. Tức là nếu chỉ hang X cột B mà rỗng , trong khi hang X cột D có data thì nó k xóa... nó chỉ xóa tất cả dòng trống trở xuống chỉ khi cả hàng X ở cột B và D cùng rỗng.

E cảm ơn ạ!
 

File đính kèm

  • Sample File.xlsm
    24.8 KB · Đọc: 11
Dear mọi ng.

Em có them 1 bài toán nhỏ như file đính kèm ạ.

Em muốn chạy hết hang của cột B và cột D để xóa bỏ những dòng trống bên dưới kèm điều kiện là cả 2 hang của cột B và D cùng rỗng thì nó mới xóa. Tức là nếu chỉ hang X cột B mà rỗng , trong khi hang X cột D có data thì nó k xóa... nó chỉ xóa tất cả dòng trống trở xuống chỉ khi cả hàng X ở cột B và D cùng rỗng.

E cảm ơn ạ!
Mã:
Sub Sheet4_Button1_Click()
Dim i As Long
With Sheet4
    For i = 1 To 18
        If Len(.Cells(i, 2)) = 0 And Len(.Cells(i, 4)) = 0 Then
           Rows(i).Delete
        End If
    Next i
End With
End Sub
Đây bạn xem.
 
Upvote 0
Mã:
Sub Sheet4_Button1_Click()
Dim i As Long
With Sheet4
    For i = 1 To 18
        If Len(.Cells(i, 2)) = 0 And Len(.Cells(i, 4)) = 0 Then
           Rows(i).Delete
        End If
    Next i
End With
End Sub
Đây bạn xem.
Xóa dòng luôn luôn và luôn luôn xóa từ dưới lên trên.

Xóa cột luôn luôn và luôn luôn xóa từ phải qua trái.
 
Upvote 0
Mã:
Sub Sheet4_Button1_Click()
Dim i As Long
With Sheet4
    For i = 1 To 18
        If Len(.Cells(i, 2)) = 0 And Len(.Cells(i, 4)) = 0 Then
           Rows(i).Delete
        End If
    Next i
End With
End Sub
Đây bạn xem.
Hi Cậu!

Tớ thử đoạn code đó nhưng có 2 vấn đè :

1. Nó chạy hơi chậm vì biến I. Có cách nào cho nó chạy kiểu Range k cậu
2. Nó đang check xóa từng dòng một cậu ạ... chứ k phải xóa tất cả. tớ muốn là nó check xem hang X cột B và cột D nào mà trống cả 2 là nó xóa sạch từ đó trở xuống.

Cậu check file giúp tớ nhé :)
 

File đính kèm

  • Sample File.xlsm
    26.5 KB · Đọc: 5
Upvote 0
Xóa dòng luôn luôn và luôn luôn xóa từ dưới lên trên.

Xóa cột luôn luôn và luôn luôn xóa từ phải qua trái.
Câu lệnh trên sai chỗ nào vậy.Bác befaint.
Bài đã được tự động gộp:

Hi Cậu!

Tớ thử đoạn code đó nhưng có 2 vấn đè :

1. Nó chạy hơi chậm vì biến I. Có cách nào cho nó chạy kiểu Range k cậu
2. Nó đang check xóa từng dòng một cậu ạ... chứ k phải xóa tất cả. tớ muốn là nó check xem hang X cột B và cột D nào mà trống cả 2 là nó xóa sạch từ đó trở xuống.

Cậu check file giúp tớ nhé :)
đây bạn xem
Mã:
Sub Sheet4_Button1_Click()
Dim i As Long
With Sheet4
    For i = 1 To 18
        If Len(.Cells(i, 2)) = 0 And Len(.Cells(i, 4)) = 0 Then
           Rows(i & ":" & Rows.Count).Delete
           Exit For
        End If
    Next i
End With
End Sub
 
Upvote 0
Tớ đang có đoạn code này ... Nhưng kết hợp thế nào để nó check đc điều kiện cả hang X của 2 cột đều phải là rỗng thì nó mới Delete từ đó trở xuống cậu nhỉ ?

LastRow = Sheet2.Range("E5").SpecialCells(xlCellTypeLastCell).Row
LastRow1 = Sheet2.Range("N5").SpecialCells(xlCellTypeLastCell).Row
Set Rng = Range("E5:E" & LastRow)
Set Rng1 = Range("N5:N" & LastRow)
Rng.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
 
Upvote 0
1/ Nguyên tắc và bản chất bảng tính Excel là vậy. Khi xóa được một dòng thì toàn bộ phía dưới dồn lên.
Đơn giản thử với 2 dòng đều trống liên tiếp xem.

2/ Viết code xong thì luôn luôn có bước thử nghiệm.
Vâng cháu cảm ơn nhé.Code này lỗi là không duyệt được hết các dòng.
 
Upvote 0
1/ Nguyên tắc và bản chất bảng tính Excel là vậy. Khi xóa được một dòng thì toàn bộ phía dưới dồn lên.
Đơn giản thử với 2 dòng đều trống liên tiếp xem.

2/ Viết code xong thì luôn luôn có bước thử nghiệm.
Thi thoảng e nhờ Snow giúp nên viết code xong bạn ấy gửi luôn, e la ng thử nghiệm bác ạ :D...

LastRow = Sheet2.Range("E5").SpecialCells(xlCellTypeLastCell).Row
LastRow1 = Sheet2.Range("N5").SpecialCells(xlCellTypeLastCell).Row
Set Rng = Range("E5:E" & LastRow)
Set Rng1 = Range("N5:N" & LastRow)
Rng.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete

Đoạn code trên làm tnao để kết hợp check cả dòng X của 2 cột là rỗng thì mới delete toàn bộ từ dòng trống đó trở xuống ạ ?

Nếu chỉ hang X cột E mà rỗng thì k delete, chỉ khi hang X cột E và cột N cùng rỗng thì mới delete từ hang đó đến hết ạ.
 
Upvote 0
Sẵn tiện đây các anh chị cho em hỏi, có cách nào xóa Row ẩn lẹ không nhỉ (cả 1.000 row) duyệt qua từng dòng thì lâu quá
 
Upvote 0
Xóa trước khi ẩn có được không? Tức là điều kiện ẩn dòng là gì ấy? Bạn gửi bài toán cụ thể xem nào.
Tức là người ta đã dùng auto filter để ẩn hết các dòng thừa bay giờ mình chỉ việc xóa đi (dạng làm Addin cho người khác ssử dụng ý), mà mình kkhông nghĩ được giải pháp nào maà xóa lẹ nhất.
Thay vì xóa dòng hiện thì chỉ chọn dòng hiện rồi delete 1 phát
 
Upvote 0
Tức là người ta đã dùng auto filter để ẩn hết các dòng thừa bay giờ mình chỉ việc xóa đi (dạng làm Addin cho người khác ssử dụng ý), mà mình kkhông nghĩ được giải pháp nào maà xóa lẹ nhất.
Thay vì xóa dòng hiện thì chỉ chọn dòng hiện rồi delete 1 phát

Excel có cho chọn 'visible cells', nếu thêm chức năng 'inverse select' nữa thì tuyệt rồi.

Vậy mình làm cái add-ins thực hiện cả việc Filter nữa đi. Đại khái: chọn vùng, nhập địa chỉ cột cần lọc và điều kiện cần lọc (cho khoảng 5 trường lọc gì đó), rồi 'delete'.
 
Upvote 0
Excel có cho chọn 'visible cells', nếu thêm chức năng 'inverse select' nữa thì tuyệt rồi.

Vậy mình làm cái add-ins thực hiện cả việc Filter nữa đi. Đại khái: chọn vùng, nhập địa chỉ cột cần lọc và điều kiện cần lọc (cho khoảng 5 trường lọc gì đó), rồi 'delete'.
Dây cũng là 1 giải phap
Nếu vậy lam cái avandfilter cho lẹ chú xóa mần chi hihih
 
Upvote 0
LastRow = Sheet2.Range("E5").SpecialCells(xlCellTypeLastCell).Row
LastRow1 = Sheet2.Range("N5").SpecialCells(xlCellTypeLastCell).Row
Set Rng = Range("E5:E" & LastRow)
Set Rng1 = Range("N5:N" & LastRow)
Rng.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
Đoạn code trên làm tnao để kết hợp check cả dòng X của 2 cột là rỗng thì mới delete toàn bộ từ dòng trống đó trở xuống ạ ?
Nếu chỉ hang X cột E mà rỗng thì k delete, chỉ khi hang X cột E và cột N cùng rỗng thì mới delete từ hang đó đến hết ạ.
PHP:
Sub HaDoan_PAP()
Dim lRw As Long, lRw1 As Long, Dg As Long
Dim Rng As Range, Cls As Range, dRg As Range

lRw = Sheet4.Range("E65500").End(xlUp).Row
lRw1 = Sheet4.Range("N65500").End(xlUp).Row
If lRw1 > lRw Then Dg = lRw1 Else Dg = lRw
Set Rng = Range("E5:N" & Dg):              ' MsgBox Rng.Address    '
For Each Cls In [E5].Resize(Rng.Rows.Count)
    Dg = Cls.Row
    If Cls.Value = "" And Cells(Dg, "N").Value = "" Then
        If dRg Is Nothing Then
            Set dRg = Rows(Dg & ":" & Dg)
        Else
            Set dRg = Union(dRg, Rows(Dg & ":" & Dg))
        End If
    End If
Next Cls
If Not dRg Is Nothing Then
'    MsgBox dRg.Rows.Count      '
    dRg.Delete
Else
    MsgBox "Nothing"
End If
End Sub
 
Upvote 0
PHP:
Sub HaDoan_PAP()
Dim lRw As Long, lRw1 As Long, Dg As Long
Dim Rng As Range, Cls As Range, dRg As Range

lRw = Sheet4.Range("E65500").End(xlUp).Row
lRw1 = Sheet4.Range("N65500").End(xlUp).Row
If lRw1 > lRw Then Dg = lRw1 Else Dg = lRw
Set Rng = Range("E5:N" & Dg):              ' MsgBox Rng.Address    '
For Each Cls In [E5].Resize(Rng.Rows.Count)
    Dg = Cls.Row
    If Cls.Value = "" And Cells(Dg, "N").Value = "" Then
        If dRg Is Nothing Then
            Set dRg = Rows(Dg & ":" & Dg)
        Else
            Set dRg = Union(dRg, Rows(Dg & ":" & Dg))
        End If
    End If
Next Cls
If Not dRg Is Nothing Then
'    MsgBox dRg.Rows.Count      '
    dRg.Delete
Else
    MsgBox "Nothing"
End If
End Sub
Dear Anh,

Em co thử nhưng chưa đc ạ.

Mọi ng giúp em 1 đoạn code nào càng ngắn xúc tích với ạ.

Mục tiêu là biến sẽ chạy từ trên xuống dưới để tìm xem hang nào mà rỗng cả ở 2 cột thì nó mới bắt đầu Delete từ đó xuống tất cả ạ.
 

File đính kèm

  • Sample File.xlsm
    32.9 KB · Đọc: 7
Upvote 0
Dear Anh,

Em co thử nhưng chưa đc ạ.

Mọi ng giúp em 1 đoạn code nào càng ngắn xúc tích với ạ.

Mục tiêu là biến sẽ chạy từ trên xuống dưới để tìm xem hang nào mà rỗng cả ở 2 cột thì nó mới bắt đầu Delete từ đó xuống tất cả ạ.
Bạn tham khảo bài hỏi này có liên quan với bài hỏi của bạn.
Xem các bài trả lời tiếp bên dưới.
https://giaiphapexcel.com/diendan/t...-những-thắc-mắc-về-code-vba.83698/post-893793
 
Upvote 0
Bài này không khó, chỉ cái phải xác định chính xác vùng dữ liệu của bạn, các cột điều kiện & bạn muốn xóa cái gì
Bạn chạy thử code này trong "sheet 4":
Mã:
Public Sub Xoa()
    Dim Vung, I
    Set Vung = Range([B1], [B50000].End(xlUp)).Resize(, 3)
        For I = 1 To Vung.Rows.Count
            If Vung(I, 1) = "" And Vung(I, 3) = "" Then
                Vung(I, 1).Resize(Vung.Rows.Count - I + 1, 3).ClearContents: : Exit For
            End If
        Next I
End Sub
Trong code tôi dùng "ClearContents" để xóa nội dung, còn bạn muốn xóa kiểu nào thì thay vào
Cũng có thể dùng mảng để giải quyết bài này
Thân
 
Upvote 0
Web KT

Group

DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2
Back
Top Bottom