Chào mọi người,
Dạo này mình đang làm một project cần kiểm tra và loại bỏ các dòng dữ liệu bị trùng lặp trong một bảng tính lớn. Thay vì cứ ngồi lọc tay hoặc dùng các hàm phức tạp, mình quyết định viết một đoạn VBA để tự động hóa việc này. Vừa làm vừa học, mình cũng rút ra được một vài kinh nghiệm hay ho, muốn chia sẻ lại với anh em trong diễn đàn.
Về cơ bản, ý tưởng là mình sẽ duyệt qua từng dòng, so sánh giá trị ở một hoặc nhiều cột (tùy thuộc vào tiêu chí trùng lặp) với các dòng phía trước. Nếu phát hiện trùng, mình sẽ đánh dấu hoặc xóa dòng đó đi.
Đây là đoạn code cơ bản mình hay dùng:
Sub CheckForDuplicates()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long, j As Long
Dim dataRange As Range
Set ws = ThisWorkbook.Sheets("Sheet1") ' Thay "Sheet1" bằng tên sheet của bạn
lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row ' Lấy dòng cuối cùng dựa vào cột A
Set dataRange = ws.Range("A2:C" & lastRow) ' Phạm vi dữ liệu cần kiểm tra (cột A, B, C) - tùy chỉnh lại nếu cần
Application.ScreenUpdating = False ' Tắt cập nhật màn hình để code chạy nhanh hơn
For i = dataRange.Rows.Count To 1 Step -1 ' Duyệt từ dưới lên để tránh lỗi khi xóa dòng
For j = i - 1 To 1 Step -1
If Application.WorksheetFunction.CountIf(dataRange.Rows(i).Cells, dataRange.Rows(j).Cells) > 0 Then ' Kiểm tra trùng lặp trên tất cả các cột trong phạm vi
' Nếu muốn kiểm tra theo một cột cụ thể, ví dụ cột A, thì thay bằng:
' If ws.Cells(i + 1, "A").Value = ws.Cells(j + 1, "A").Value Then
ws.Rows(i + 1).Delete ' Xóa dòng trùng lặp (chú ý dòng i+1 vì phạm vi bắt đầu từ A2)
Exit For ' Thoát vòng lặp con khi đã xóa
End If
Next j
Next i
Application.ScreenUpdating = True
MsgBox "Đã kiểm tra và loại bỏ các dòng trùng lặp!"
End SubLưu ý:
- Đoạn code trên sẽ xóa các dòng trùng lặp. Hãy sao lưu dữ liệu trước khi chạy để tránh mất mát không đáng có.
- Bạn cần tùy chỉnh tên sheet và phạm vi dữ liệu (
dataRange) cho phù hợp với file của mình. - Nếu muốn kiểm tra trùng lặp dựa trên nhiều cột khác nhau, bạn có thể chỉnh sửa điều kiện `If` cho phức tạp hơn.
Anh em nào có cách nào hay hơn hoặc gặp vấn đề gì với đoạn code này thì cùng thảo luận nhé!