Tạo SortedList:
Giả sử ta có data mà các key chỉ xuất hiện một lần duy nhất (hãy chú ý tính duy nhất).
Các key tôi viết trên cột B, chúng có tính duy nhất, không có key nào trùng nhau.
Bây giờ tôi sẽ sắp xếp dữ liệu theo Key, không để nó lộn xộn như trên nữa.
Kết quả:
Nào, bây giờ nếu key bị trùng lặp thì làm thế nào đây?
Đầu tiên, hãy xem lại code trên, nếu Key chưa tồn tại thì đoạn code dưới đây sẽ nạp vào collection.
Nếu đã tồn tại rồi thì không nạp nữa.
Do đó ta có kết quả như sau:
Bây giờ ta sửa cách nạp vào collection thành như sau:
Hãy chú ý đoạn code dòng 12~14, bây giờ thì nó sẽ cập nhật key ở lần phát hiện mới nhất, vì vậy kết quả sẽ thành:
Nguồn tham khảo và dịch:
Giả sử ta có data mà các key chỉ xuất hiện một lần duy nhất (hãy chú ý tính duy nhất).
Bạn cần đăng nhập để thấy đính kèm
Các key tôi viết trên cột B, chúng có tính duy nhất, không có key nào trùng nhau.
Bây giờ tôi sẽ sắp xếp dữ liệu theo Key, không để nó lộn xộn như trên nữa.
Mã:
Sub test_A1()
Dim DataList As Object
Dim x, i As Long
Set DataList = CreateObject("System.Collections.SortedList")
x = Range("B2:C8").Value
For i = LBound(x) To UBound(x)
If DataList.Contains(x(i, 1)) = False Then
DataList.Add x(i, 1), x(i, 2)
End If
Next i
For i = 0 To DataList.Count - 1
Cells(i + 2, 5).Value = DataList.GetKey(i)
Cells(i + 2, 6).Value = DataList.GetByIndex(i)
Next i
Set DataList = Nothing
End Sub
Bạn cần đăng nhập để thấy đính kèm
Nào, bây giờ nếu key bị trùng lặp thì làm thế nào đây?
Đầu tiên, hãy xem lại code trên, nếu Key chưa tồn tại thì đoạn code dưới đây sẽ nạp vào collection.
Mã:
If DataList.Contains(x(i, 1)) = False Then
DataList.Add x(i, 1), x(i, 2)
End If
Do đó ta có kết quả như sau:
Bạn cần đăng nhập để thấy đính kèm
Bây giờ ta sửa cách nạp vào collection thành như sau:
Mã:
Sub test_A2()
Dim DataList As Object
Dim x, i As Long
Set DataList = CreateObject("System.Collections.SortedList")
x = Range("B2:C8").Value
' For i = LBound(x) To UBound(x)
' If DataList.Contains(x(i, 1)) = False Then
' DataList.Add x(i, 1), x(i, 2)
' End If
' Next i
For i = LBound(x) To UBound(x)
DataList.Item(x(i, 1)) = x(i, 2)
Next i
For i = 0 To DataList.Count - 1
Cells(i + 2, 5).Value = DataList.GetKey(i)
Cells(i + 2, 6).Value = DataList.GetByIndex(i)
Next i
Set DataList = Nothing
End Sub
Bạn cần đăng nhập để thấy đính kèm
Nguồn tham khảo và dịch:
Bạn cần đăng nhập để thấy link