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