Chào các bạn trong diễn đàn,
Mình thường xuyên phải làm việc với các bộ dữ liệu lớn và việc xử lý các bản ghi trùng lặp luôn là một công việc tốn nhiều thời gian. Hôm nay, mình muốn chia sẻ một đoạn code VBA nhỏ gọn giúp tự động hóa việc này. Hy vọng nó sẽ hữu ích cho các bạn.
Vấn đề: Xóa các dòng dữ liệu bị trùng lặp dựa trên một hoặc nhiều cột.
Giải pháp VBA:
Chúng ta có thể sử dụng phương pháp RemoveDuplicates của đối tượng Range. Đây là một phương pháp rất hiệu quả và nhanh chóng.
Sub XoaDuLieuTrungLap()
Dim ws As Worksheet
Dim rng As Range
Dim colList As Variant
' --- THAY ĐỔI THÔNG TIN DƯỚI ĐÂY ---
Set ws = ThisWorkbook.Sheets("Sheet1") ' Tên sheet chứa dữ liệu
' Xác định phạm vi dữ liệu (bao gồm cả tiêu đề)
Set rng = ws.Range("A1").CurrentRegion
' Danh sách các cột để kiểm tra trùng lặp (ví dụ: cột A và B)
' Nếu chỉ kiểm tra 1 cột, ví dụ cột A thì colList = Array(1)
colList = Array(1, 2)
' ----------------------------------
On Error Resume Next
rng.RemoveDuplicates Columns:=colList, Header:=xlYes
On Error GoTo 0
MsgBox "Đã xóa xong dữ liệu trùng lặp!", vbInformation
End SubGiải thích:
ws.Sheets("Sheet1"): Chọn sheet bạn muốn xử lý.ws.Range("A1").CurrentRegion: Tự động xác định vùng dữ liệu bắt đầu từ ô A1. Nếu dữ liệu của bạn bắt đầu ở ô khác, hãy chỉnh sửa cho phù hợp.colList = Array(1, 2): Đây là phần quan trọng nhất. Nó chỉ định các cột sẽ được dùng để so sánh và xác định trùng lặp.1tương ứng với cột A,2với cột B, v.v. Nếu bạn chỉ muốn xóa trùng theo cột 'Mã SP' (giả sử là cột C), bạn sẽ dùngcolList = Array(3).Header:=xlYes: Khai báo rằng vùng dữ liệu của bạn có dòng tiêu đề. Nếu không có, hãy đổi thànhxlNo.
Cách này rất tiện lợi khi bạn có nhiều điều kiện để xác định trùng lặp mà không cần phải viết code phức tạp.
Chúc các bạn thành công!