Menu

Tự động hóa việc tạo danh sách duy nhất từ nhiều cột bằng VBA

Kha Thiện Anh 05/06/2026 13:29 311 lượt xem 2 trả lời

Chào mọi người,

Dạo này mình đang làm việc với một file Excel có khá nhiều dữ liệu và đôi khi mình cần tạo ra một danh sách duy nhất (unique list) từ nhiều cột khác nhau. Thay vì copy rồi paste vào một cột rồi dùng chức năng Remove Duplicates, mình đã thử tìm cách tự động hóa việc này bằng VBA và thấy khá hiệu quả.

Ý tưởng của mình là viết một đoạn code VBA có thể:

  • Chọn một vùng dữ liệu bao gồm nhiều cột.
  • Tạo ra một mảng tạm để lưu trữ tất cả các giá trị từ các cột đã chọn.
  • Duyệt qua mảng này và chỉ lấy những giá trị chưa từng xuất hiện.
  • Ghi danh sách duy nhất này ra một Sheet hoặc một vùng chỉ định.

Mình đã thử viết một đoạn code đơn giản như sau:

Sub GetUniqueListFromMultiColumns()
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim rngSource As Range
    Dim rngTarget As Range
    Dim dict As Object
    Dim cell As Range
    Dim lastRow As Long
    Dim i As Long

    Set wsSource = ThisWorkbook.Sheets("Sheet1") ' Thay "Sheet1" bằng tên sheet chứa dữ liệu
    Set wsTarget = ThisWorkbook.Sheets("Sheet2") ' Thay "Sheet2" bằng tên sheet bạn muốn xuất kết quả

    ' Xác định vùng dữ liệu nguồn (ví dụ: từ cột A đến cột C)
    Set rngSource = wsSource.Range("A1:C100") ' Thay đổi theo vùng dữ liệu của bạn

    Set dict = CreateObject("Scripting.Dictionary")

    ' Duyệt qua từng ô trong vùng nguồn
    For Each cell In rngSource
        If Not dict.Exists(cell.Value) Then
            dict.Add cell.Value, 1
        End If
    Next cell

    ' Ghi kết quả ra sheet đích
    Set rngTarget = wsTarget.Range("A1") ' Ô bắt đầu ghi kết quả
    i = 0
    For Each key In dict.Keys
        rngTarget.Offset(i, 0).Value = key
        i = i + 1
    Next key

    MsgBox "Đã tạo danh sách duy nhất thành công!"
    Set dict = Nothing
End Sub

Đoạn code trên sử dụng Scripting.Dictionary để lưu trữ các giá trị duy nhất. Nó duyệt qua từng ô trong vùng chỉ định và thêm giá trị vào Dictionary nếu nó chưa tồn tại.

Mọi người có ý kiến hay cách làm nào khác hiệu quả hơn không? Chia sẻ cho mình với nhé!

2

Hay quá bạn ơi! Ý tưởng này rất thực tế. Mình cũng hay gặp trường hợp tương tự, việc tự động hóa bằng VBA đúng là tiết kiệm kha khá thời gian.

Bạn có thể chia sẻ cụ thể đoạn code bạn dùng để duyệt qua mảng và chỉ lấy giá trị duy nhất không? Mình tò mò muốn xem cách bạn xử lý phần này.

Cảm ơn bạn đã chia sẻ nhé!

1

Hay quá bạn ơi! Ý tưởng này rất thực tế. Mình cũng hay gặp trường hợp tương tự, việc tự động hóa bằng VBA đúng là tiết kiệm kha khá thời gian.

Bạn có thể chia sẻ cụ thể đoạn code bạn dùng để duyệt qua mảng và chỉ lấy giá trị duy nhất không? Mình tò mò muốn xem cách bạn xử lý phần này.

Cảm ơn bạn đã chia sẻ nhé!

5

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

Đăng nhập Đăng ký