Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa việc xử lý dữ liệu trùng lặp trong Excel bằng VBA

Chiêm Trúc Vân 10/04/2026 06:55 127 lượt xem 3 trả lời

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 Sub

Giả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. 1 tương ứng với cột A, 2 vớ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ùng colList = 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ành xlNo.

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!

5

Mình thấy cách dùng RemoveDuplicates của VBA quả thật là một giải pháp tuyệt vời cho vấn đề dữ liệu trùng lặp. Cách này vừa nhanh, vừa hiệu quả, đặc biệt là với các file dữ liệu lớn.

Bạn có thể chia sẻ thêm về trường hợp cần xóa trùng lặp dựa trên nhiều cột không? Liệu cú pháp có thay đổi nhiều không? Mình đang tò mò muốn biết thêm.

3

Cảm ơn bạn đã chia sẻ đoạn code VBA xử lý dữ liệu trùng lặp. Mình cũng rất hay gặp vấn đề này và thấy RemoveDuplicates đúng là "cứu cánh".

Mình cũng có một chút kinh nghiệm khi áp dụng cái này. Đối với trường hợp xóa trùng lặp dựa trên nhiều cột, bạn chỉ cần khai báo mảng cho tham số Columns của RemoveDuplicates là được. Ví dụ, nếu muốn xóa trùng lặp dựa trên cột A và C, bạn sẽ dùng Columns:=Array(1, 3).

Hy vọng thông tin này hữu ích cho mọi người!

5

Cảm ơn bạn đã chia sẻ kinh nghiệm về RemoveDuplicates. Đúng là phương pháp này xử lý dữ liệu trùng lặp rất hiệu quả.

Mình có một câu hỏi nhỏ: Nếu mình muốn giữ lại bản ghi trùng lặp cuối cùng thay vì bản ghi đầu tiên thì có cách nào tùy chỉnh trực tiếp bằng RemoveDuplicates không, hay mình cần phải xử lý thêm bước nào khác?

5

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

Đăng nhập Đăng ký