Hướng dẫn cách xóa nhiều dòng trong Excel

Bài viết dưới đây, chúng tôi sẽ cùng bạn tìm hiểu về cách xóa nhiều dòng trong Excel nhé!
Trong khi thao tác trên Excel, chắc hẳn bạn đã gặp phải các trường hợp cần xóa rất nhiều dòng trong Excel, nếu như các dòng đó thỏa mãn 1 điều kiện nhất định nào đó.

Ví dụ:

  • Xóa các dòng mà cột C có đánh dấu “x”
  • Xóa các dòng mà Cột B có giá trị nhỏ hơn 0.1

Nếu bạn đam mê tìm hiểu về VBA để áp dụng cho các thao tác trên Excel thì đây là cơ hội để rèn luyện đấy! Dưới đây là 1 đoạn code để giải quyết vấn đề xóa nhiều dòng một cách tự động và nhanh chóng mà bạn có thể học tập.

Sub DeleteUsingForLoop()
Dim rowIndex As Long
Application.ScreenUpdating = False
With Sheet1
.Range(“D1”) = Now
For rowIndex = 40000 To 1 Step 1
If .Range(“A” & rowIndex).Value < 0.1 Then
.Range(“A” & rowIndex).EntireRow.Delete
End If
Next
.Range(“E1”) = Now
End With
Application.ScreenUpdating = True
MsgBox “Done”
End Sub
Sau khi đã bấm nút cho code chạy, việc bạn làm chỉ là nghỉ ngơi cho thời gian code xử lí mà không cần phải thao tác thêm bất cứ thứ gì. Tuy nhiên, có nhiều trường hợp đoạn code của bạn chạy mãi, chạy mãi mà vẫn không thấy show kết quả. Vậy thì bạn cần theo dõi những phần dưới đây của bài viết nhé!
Xem thêm: Hướng dẫn cách gạch ngang chữ trong Word, Power Point và Excel

Chuẩn bị dữ liệu để thực hiện test việc xóa nhiều dòng

Trong bảng dưới, dữ liệu để test việc xóa dòng nằm ở cột A, Sheet 1, vùng A1:A40000. Đây là những giá trị nằm trong khoảng từ 0 tới 1, và được tạo thành từ hàm mảng động mới trong Excel RandArray. Yêu cầu trong ví dụ này là bạn sẽ thực hiện xóa đi các dòng mà cột A có giá trị nhỏ hơn 0,1. Hiện tại đang có khoảng 4000 dòng thỏa điều kiện này.

Với đoạn code VBA đã đề cập, việc xóa dòng theo điều kiện này sẽ mất khoảng hơn 10 phút. Ở hình bên dưới, D1 sẽ là thời gian bắt đầu và D2 là thời gian đoạn code kết thúc chạy.

Cách xóa nhiều dòng theo điều kiện nhanh hơn

Cách 1:

Ý tưởng ở đây là bạn sẽ dùng một công thức trong cột phụ để có thể nhận biết được dòng nào cần xóa, rồi xóa dòng đó với đoạn code VBA sau:

Sub DeleteUsingSpecialCells()
Application.ScreenUpdating = False
With Sheet1.Range(“B1:B40000”)
.Range(“E1”) = Now
.Formula = “=IF(A1<0.1,0/0,A1)”
.Cells.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Delete
.Range(“E2”) = Now
End With
Application.ScreenUpdating = True
MsgBox “Done”
End Sub
Kết quả cho ra nhanh hơn 1 chút

Cách 2:

Bạn dùng hàm Filter trong bộ hàm mảng động mới của Microsoft. Bằng phương pháp này, kết quả filter gần như sẽ có ngay lập tức (kết quả lọc ở cột B)

Cách 3:

Dùng chức năng Filter để tiến hành lọc kết quả hoặc là copy qua sheet khác:

Sub DeleteRowsWithValuesNewSheet() ‘100K records 10K to delete
‘Test 1: 2.40234375 sec
‘Test 2: 2.41796875 sec
‘Test 3: 2.40234375 sec
‘1M records 100K to delete
‘Test 1: 32.9140625 sec
‘Test 2: 33.1484375 sec
‘Test 3: 32.90625 sec
Dim oldWs As Worksheet, newWs As Worksheet, rowHeights() As Long
Dim wsName As String, t As Double, oldUsedRng As Range
FastWB True: t = Timer
Set oldWs = Worksheets(1)
wsName = oldWs.Name
Set oldUsedRng = oldWs.Range(“A1”, GetMaxCell(oldWs.UsedRange))
If oldUsedRng.Rows.Count > 1 Then ‘If sheet is not empty
Set newWs = Sheets.Add(After:=oldWs) ‘Add new sheet
With oldUsedRng
.AutoFilter Field:=1, Criteria1:=“<>Test String”
.Copy ‘Copy visible data
End With
With newWs.Cells
.PasteSpecial xlPasteColumnWidths
.PasteSpecial xlPasteAll ‘Paste data on new sheet
.Cells(1, 1).Select ‘Deselect paste area
.Cells(1, 1).Copy ‘Clear Clipboard
End With
oldWs.Delete ‘Delete old sheet
newWs.Name = wsName
End If
FastWB False: InputBox “Duration: “, “Duration”, Timer t
End Sub
Cách 4:

Tiến hành xóa trực tiếp bằng việc sử dụng Autofilter trong VBA hoặc là xóa bằng tay.

Sub DeleteIf()
Dim LR As Long
Application.ScreenUpdating = False
With Sheet1
.Range(“C1”).Value = Now
If .AutoFilterMode Then .AutoFilterMode = False
LR = .Range(“B” & .Rows.Count).End(xlUp).Row
With .Range(“B1”).Resize(LR)
.AutoFilter
.AutoFilter Field:=1, Criteria1:=“>0.5”
.Offset(1).Resize(LR 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete Shift:=xlUp
End With
.AutoFilterMode = False
.Range(“C2”).Value = Now
End With
Application.ScreenUpdating = True
End Sub

Vậy là thông qua bài viết này, chúng tôi đã mang lại cho bạn 4 cách xóa nhiều dòng trong Excel vô cùng đơn giản và dễ dàng, chúc bạn thực hiện thành công!

Xem thêm: Hướng dẫn cách sử dụng hàm ngày tháng năm trong Excel

Tin tức liên quan

Gửi bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *