Menu

Tự động hóa việc kiểm tra trùng lặp dữ liệu bằng VBA

Lã Phương Chi 10/06/2026 11:09 255 lượt xem 2 trả lời

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 Sub

Lư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é!

0

Hay quá bạn ơi! Việc tự động hóa kiểm tra trùng lặp dữ liệu bằng VBA đúng là cứu cánh cho khối lượng dữ liệu lớn. Mình cũng từng vật lộn với việc này và thấy cách của bạn rất hợp lý.

Không biết bạn có thể chia sẻ thêm về việc xử lý ngoại lệ không? Ví dụ, nếu có những trường hợp mình muốn bỏ qua việc kiểm tra trùng lặp ở một số dòng nhất định, bạn sẽ làm thế nào?

4

Chào bạn,

Cảm ơn bạn đã chia sẻ kinh nghiệm tự động hóa kiểm tra trùng lặp dữ liệu bằng VBA. Mình thấy đây là một vấn đề rất thực tế và hữu ích cho nhiều anh em làm Excel.

Bạn có thể chia sẻ thêm về cách bạn xử lý trường hợp trùng lặp dựa trên nhiều cột không? Mình đang gặp chút khó khăn với trường hợp này, cần so sánh đồng thời giá trị ở 2-3 cột khác nhau để xác định.

Rất mong nhận được thêm chia sẻ từ bạn!

3

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký