Nhờ mọi người giúp đỡ. Hiện tại mình đang dùng Dic để loại các dữ liệu trùng, bằng cách đếm ngược và check key tồn tại.
Tuy nhiên mình có 1 vấn đề là kích thước mảng trước và sau khi chạy code là khác nhau, nên khi mình xuất mảng kết quả thì bị chứa các giá trị <Empty>, mình có dùng Redim mảng kết quả trước khi gán dữ liệu nhưng cũng chưa ổn.
Đang ngâm cứu cái "ReDim Preserve" của anh ndu96081631 mà vẫn chưa thấm.
www.giaiphapexcel.com
www.giaiphapexcel.com
Add thêm dữ liệu cho dễ hình dung.
Tuy nhiên mình có 1 vấn đề là kích thước mảng trước và sau khi chạy code là khác nhau, nên khi mình xuất mảng kết quả thì bị chứa các giá trị <Empty>, mình có dùng Redim mảng kết quả trước khi gán dữ liệu nhưng cũng chưa ổn.
PHP:
Function ArrayRemoveDups(MyArray As Variant) As Variant
Dim Vung As Variant
Set Dic = CreateObject("scripting.dictionary")
k = 0
ReDim Vung(1 To UBound(MyArray), 1 To UBound(MyArray, 2))
For i = 1 To UBound(MyArray)
Gom = MyArray(i, 1) & "#" & MyArray(i, 2) & "#" & MyArray(i, 3)
If Not Dic.exists(Gom) Then
k = k + 1
Dic.Add Gom, i
For j = 1 To UBound(MyArray, 2)
Vung(k, j) = MyArray(i, j)
Next j
Debug.Print k
End If
Next i
ReDim Temp(1 To Dic.Count, 1 To 3)
Temp = Vung
ArrayRemoveDups = Temp
End Function

Nhờ hướng dẫn sử dụng Dictionary Object.
Tôi muốn dùng Dictionary Object để lọc duy nhất từ nhiều bảng nhưng các bảng nguồn có nhiều cột nên không biết dùng Dictionary Object như thế nào. Hiện tại Tôi chỉ lấy được 2 cột từ Dic.Keys và Dic.items vì vậy cần được các bạn trợ giúp viết sub hoặc chỉ dẫn. Thanks !


Thắc mắc về hàm UDF UniqueList
Function UniqueList(ParamArray sArray()) Dim Item, TmpArr, SubArr On Error Resume Next With CreateObject("Scripting.Dictionary") For Each SubArr In sArray TmpArr = SubArr If TypeName(TmpArr) "Variant()" Then If TmpArr "" Then .Add TmpArr, "" Else For...

File đính kèm
Lần chỉnh sửa cuối: