Xoá dòng có điều kiện bằng vba

Lương Tuấn Ba

Thành viên mới
Mã:
Option Explicit
Sub xoadongcodieukien()
    Dim dc&, i&
    dc = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
    For i = dc To 2 Step -1
        If (Sheet1.Range("A" & i) = Sheet1.Range("C1").Value) Then
            Sheet1.Rows(i).Delete
        End If
    Next i
End Sub
em có code xoá dòng theo điều kiện như trên nhưng nếu dữ liệu lớn dữ liệu load rất lâu, vậy có cách nào để xoá dòng nhanh hơn trong vba excel không ạ?
 

NhanSu

Thành Viên Nổi Bật

Mỗi lần xóa dòng thì Excel sẽ phải đẩy dòng ở dưới lên lấp chỗ trống, nếu dòng cần xóa nằm rải rác hoặc xóa từng dòng sẽ rất lâu. Để khắc phục, bạn sử dụng cột phụ để đánh dấu dòng cần xóa rồi sort cho dòng đó xuống dưới, chỉ xóa một lần là xong.
Mã:
Option Explicit
Sub xoadongcodieukien()
Dim dc&, i&, arr1(), arr2(), x, LastCol&
dc = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
Redim arr1(1 to dc - 1, 1 to 1)
Redim arr2(1 to dc - 1, 1 to 1)
arr1 = sheet1.range("A2:A" & dc).value
x = Sheet1.Range("C1").Value
For i = 1 To dc - 1
If arr1(i,1) =  x Then arr(i,2)=1
Next i
LastCol=sheet1.range("A1").end(xltoright).column
Sheet1.Range("A1").offset(1,LastCol).resize(dc-1)=arr2
'Sort bảng dữ liệu và xóa ở đây
End Sub
Do mình viết trên điện thoại nên bạn tự hoàn thiện code nhé.
 

vanthanhVBA

Thành viên
Bạn tham khảo topic này:
Ở trên, bạn NhanSu đã dùng mảng để xử lý nhằm tăng tốc độ, thay vì xử lý trực tiếp trên Excel (cách ban đầu của bạn).
 

Lương Tuấn Ba

Thành viên mới
Mỗi lần xóa dòng thì Excel sẽ phải đẩy dòng ở dưới lên lấp chỗ trống, nếu dòng cần xóa nằm rải rác hoặc xóa từng dòng sẽ rất lâu. Để khắc phục, bạn sử dụng cột phụ để đánh dấu dòng cần xóa rồi sort cho dòng đó xuống dưới, chỉ xóa một lần là xong.
Mã:
Option Explicit
Sub xoadongcodieukien()
Dim dc&, i&, arr1(), arr2(), x, LastCol&
dc = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
Redim arr1(1 to dc - 1, 1 to 1)
Redim arr2(1 to dc - 1, 1 to 1)
arr1 = sheet1.range("A2:A" & dc).value
x = Sheet1.Range("C1").Value
For i = 1 To dc - 1
If arr1(i,1) =  x Then arr(i,2)=1
Next i
LastCol=sheet1.range("A1").end(xltoright).column
Sheet1.Range("A1").offset(1,LastCol).resize(dc-1)=arr2
'Sort bảng dữ liệu và xóa ở đây
End Sub
Do mình viết trên điện thoại nên bạn tự hoàn thiện code nhé.
cảm ơn @NhanSu rất nhiều mình áp dụng thử
 
Top