Xóa dòng trống kèm điều kiện (1 người xem)

Liên hệ QC

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

hadoan-pap

Thành viên tiêu biểu
Tham gia
8/7/15
Bài viết
461
Được thích
20
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

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

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

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
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/threads/chuyên-đề-giải-đáp-những-thắc-mắc-về-code-vba.83698/post-893793
Ui, e cảm ơn nhưng bài viết đó dài quá ạ :)...

A có thể giúp em 1 đoạn code ngắn để e học hỏi áp dung vào bài toán thực tế của em đc k ạ ?

E cảm ơn .
 
Upvote 0
Ui, e cảm ơn nhưng bài viết đó dài quá ạ :)...

A có thể giúp em 1 đoạn code ngắn để e học hỏi áp dung vào bài toán thực tế của em đc k ạ ?

E cảm ơn .
Bạn đưa file "giống thật" lên xem giữa cột E và N là kiểu dữ liệu gì, Tất cả các cột khác có dữ liệu không?
Dữ liệu không thật thì cách giải quyết cũng chưa thật đâu.
 
Upvote 0
Code đó sẽ xóa hết công thức của bạn.
Hi Snow,

Tớ chỉ muốn xóa hết các dòng trống bên dưới thôi cậu ạ, hang nào mà có data thì nó k xóa.

Cụ thể là nó chạy từ trên xuống dưới ( khoảng 400 dòng ), dòng nào mà trống là nó bắt đầu xóa từ đó cho đến hết các dòng trống khác.
Bài đã được tự động gộp:

Bạn đưa file "giống thật" lên xem giữa cột E và N là kiểu dữ liệu gì, Tất cả các cột khác có dữ liệu không?
Dữ liệu không thật thì cách giải quyết cũng chưa thật đâu.
Dear anh,

Dạ, nó là file e gửi e ví dụ trong Sheet5

Dữ lieu có công thức ạ, nhưng nó chỉ có 2 cột thôi. E muốn nó chạy từ trên xuống dưới, cứ dòng nào mà ở cột E và cột N rỗng thì nó xóa tất ạ....

File chỉ có 2 cột này là chính thôi, các cột khác k có data, công thức đâu ạ.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hi Snow,

Tớ chỉ muốn xóa hết các dòng trống bên dưới thôi cậu ạ, hang nào mà có data thì nó k xóa.

Cụ thể là nó chạy từ trên xuống dưới ( khoảng 400 dòng ), dòng nào mà trống là nó bắt đầu xóa từ đó cho đến hết các dòng trống khác.
Bài đã được tự động gộp:


Dear anh,

Dạ, nó là file e gửi e ví dụ trong Sheet5

Dữ lieu có công thức ạ, nhưng nó chỉ có 2 cột thôi. E muốn nó chạy từ trên xuống dưới, cứ dòng nào mà ở cột E và cột N rỗng thì nó xóa tất ạ....

File chỉ có 2 cột này là chính thôi, các cột khác k có data, công thức đâu ạ.
Viết trao đổi nhau dùng thuần tiếng Việt thôi. "Dear anh" nghe chõi tai quá.
Khoảng 400 dòng thì xài thử Sub này cho sheet5
PHP:
Sub GPE()
Application.ScreenUpdating = False
Dim I As Long, R1 As Long, R2 As Long, Rws As Long
With Sheet5
    R1 = .Range("E50000").End(xlUp).Row
    R2 = .Range("N50000").End(xlUp).Row
    Rws = IIf(R1 > R2, R1, R2)
    For I = Rws To 1 Step -1
        If Len(.Cells(I, 5)) = 0 And Len(.Cells(I, 14)) = 0 Then
           Rows(I).Delete
        End If
    Next I
End With
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Bạn đưa file "giống thật" lên xem giữa cột E và N là kiểu dữ liệu gì, Tất cả các cột khác có dữ liệu không?
Dữ liệu không thật thì cách giải quyết cũng chưa thật đâu.
Viết trao đổi nhau dùng thuần tiếng Việt thôi. "Dear anh" nghe chõi tai quá.
Khoảng 400 dòng thì xài thử Sub này cho sheet5
PHP:
Sub GPE()
Application.ScreenUpdating = False
Dim I As Long, R1 As Long, R2 As Long, Rws As Long
With Sheet5
    R1 = .Range("E50000").End(xlUp).Row
    R2 = .Range("N50000").End(xlUp).Row
    Rws = IIf(R1 > R2, R1, R2)
    For I = Rws To 1 Step -1
        If Len(.Cells(I, 5)) = 0 And Len(.Cells(I, 14)) = 0 Then
           Rows(I).Delete
        End If
    Next I
End With
Application.ScreenUpdating = True
End Sub
Anh ơi e cảm ơn nhé.

E tìm đc đoạn code khá ngắn nhưng nó chạy có vẻ chậm nếu nhiều dòng :).. Code anh e thấy ok rồi ạ.

Dim iCntr
Dim rng As Range
Set rng = Range("E5:N200")
For iCntr = rng.Row + rng.Rows.Count - 1 To rng.Row Step -1
If Application.WorksheetFunction.CountA(Rows(iCntr)) = 0 Then Rows(iCntr).EntireRow.Delete
Next
 
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ả ạ.
Mã:
Sub Sheet5_Button1_Click()
Dim lRw As Long, lRw1 As Long, Dg As Long
Dim Rng As Range, Cls As Range, dRg As Range

lRw = ActiveSheet.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:E" & lRw):
For r = Rng.Rows.Count To 1 Step -1
    If Rng.Cells(r, 1) = "" And Rng.Cells(r, 10).Value = "" Then
    Rng.Rows(r).EntireRow.Delete
    MsgBox Rng.Cells(r, 1).Address & "" & Rng.Cells(r, 10).Address
    End If
Next
End Sub
Mượn code của bạn design lại xíu, bạn tùy biến theo ý bạn nhé
 
Upvote 0
Mã:
Sub Sheet5_Button1_Click()
Dim lRw As Long, lRw1 As Long, Dg As Long
Dim Rng As Range, Cls As Range, dRg As Range

lRw = ActiveSheet.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:E" & lRw):
For r = Rng.Rows.Count To 1 Step -1
    If Rng.Cells(r, 1) = "" And Rng.Cells(r, 10).Value = "" Then
    Rng.Rows(r).EntireRow.Delete
    MsgBox Rng.Cells(r, 1).Address & "" & Rng.Cells(r, 10).Address
    End If
Next
End Sub
Mượn code của bạn design lại xíu, bạn tùy biến theo ý bạn nhé
Cảm ơn bạn nhé :)
Bài đã được tự động gộp:

Viết trao đổi nhau dùng thuần tiếng Việt thôi. "Dear anh" nghe chõi tai quá.
Khoảng 400 dòng thì xài thử Sub này cho sheet5
PHP:
Sub GPE()
Application.ScreenUpdating = False
Dim I As Long, R1 As Long, R2 As Long, Rws As Long
With Sheet5
    R1 = .Range("E50000").End(xlUp).Row
    R2 = .Range("N50000").End(xlUp).Row
    Rws = IIf(R1 > R2, R1, R2)
    For I = Rws To 1 Step -1
        If Len(.Cells(I, 5)) = 0 And Len(.Cells(I, 14)) = 0 Then
           Rows(I).Delete
        End If
    Next I
End With
Application.ScreenUpdating = True
End Sub
Anh BaTe ơi cho em hỏi xíu ạ.

E có đoạn code bên dưới :

Sheet8.Range("B2:D100").Copy
a = Sheet2.Range("E5").End(xlDown).Row + 1
Sheet2.Range("E" & a).PasteSpecial Paste:=xlPasteValues

Code này sẽ tìm dòng trống trong cột E, bắt đầu từ E5 ... Nếu dòng nào trống sẽ Paste data vào. Code này
Viết trao đổi nhau dùng thuần tiếng Việt thôi. "Dear anh" nghe chõi tai quá.
Khoảng 400 dòng thì xài thử Sub này cho sheet5
PHP:
Sub GPE()
Application.ScreenUpdating = False
Dim I As Long, R1 As Long, R2 As Long, Rws As Long
With Sheet5
    R1 = .Range("E50000").End(xlUp).Row
    R2 = .Range("N50000").End(xlUp).Row
    Rws = IIf(R1 > R2, R1, R2)
    For I = Rws To 1 Step -1
        If Len(.Cells(I, 5)) = 0 And Len(.Cells(I, 14)) = 0 Then
           Rows(I).Delete
        End If
    Next I
End With
Application.ScreenUpdating = True
End Sub
Anh ơi.

Anh có thể xem giúp e đoạn code này có tí xíu nhầm ở đâu mà khi e chạy nó Paste có vẻ sai sai 1 chút ạ.

Sheet8.Range("B2:D100").Copy
a = Sheet2.Range("E5").End(xlUp).Row + 1
Sheet2.Range("E" & a).PasteSpecial Paste:=xlPasteValues

Mục đích là e đang tìm dòng trống từ E5 trở xuống để paste data vào ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Gửi mọi ng.

Em có đoạn code này nhưng chạy hơi sai sai. K rõ nhầm ở đâu ạ... Mục đích là tìm dòng trống từ E5 trở xuống để Paste dữ lieu vào ạ.

Sheet8.Range("B2:D100").Copy

a = Sheet2.Range("E5").End(xlUp).Row + 1
Sheet2.Range("E" & a).PasteSpecial Paste:=xlPasteValues
Bài đã được tự động gộp:

Cảm ơn mọi ng rất nh e xử lý dc rồi ạ :)
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom