[Hỏi] Dictionay.Add nhiều Key giống nhau

Liên hệ QC

Comet297

Thành viên thường trực
Tham gia
29/11/12
Bài viết
246
Được thích
152
Xin chào các anh chị GPE

Em đang tìm hiểu Dictionary qua thread:
https://www.giaiphapexcel.com/diendan/threads/tổng-quan-về-scripting-dictionary.60643/

Trong đó có đoạn viết:

PHP:
MyDictionary.Add Key, Item
Item có nhận dữ liệu thuộc bất kì kiểu dữ liệu gì. Key cũng nhận như item nhưng ngoại trừ kiểu dữ liệu mảng (array). Key phải là duy nhất, nếu bạn thêm item với cùng một key, bạn sẽ gặp lỗi.

Em thử với cùng 1 key nhưng nhiều item khác nhau thì kết quả vẫn không thấy báo lỗi.
Vậy em đang sai ở đâu, nhờ các anh chị chỉ giúp

PHP:
Sub TestDic()
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
'Add dic key, item
For i = 3 To 7
    Dic.Add Cells(i, 1), Cells(i, 2)
Next
'Result to sheet
Range("E2").Resize(1, 5) = Dic.Keys
Range("E3").Resize(1, 5) = Dic.Items
End Sub

Xin cảm ơn mọi người.

1640340629292.png
 

File đính kèm

  • TestDic.xlsm
    35.7 KB · Đọc: 2
Lần chỉnh sửa cuối:
Xin chào các anh chị GPE

Em đang tìm hiểu Dictionary qua thread:
https://www.giaiphapexcel.com/diendan/threads/tổng-quan-về-scripting-dictionary.60643/

Trong đó có đoạn viết:

PHP:
MyDictionary.Add Key, Item
Item có nhận dữ liệu thuộc bất kì kiểu dữ liệu gì. Key cũng nhận như item nhưng ngoại trừ kiểu dữ liệu mảng (array). Key phải là duy nhất, nếu bạn thêm item với cùng một key, bạn sẽ gặp lỗi.

Em thử với cùng 1 key nhưng nhiều item khác nhau thì kết quả vẫn không thấy báo lỗi.
Vậy em đang sai ở đâu, nhờ các anh chị chỉ giúp

PHP:
Sub TestDic()
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
'Add dic key, item
For i = 3 To 7
    Dic.Add Cells(i, 1), Cells(i, 2)
Next
'Result to sheet
Range("E2").Resize(1, 5) = Dic.Keys
Range("E3").Resize(1, 5) = Dic.Items
End Sub

Xin cảm ơn mọi người.

View attachment 270719
Sao không đưa file lên để kiểm chứng?

.
 
Upvote 0
Thật thiếu xót quá.
Cảm ơn các anh/chị đã phản hồi thật nhanh
Mình xin được đính kèm file vào bài 1.

Trước khi gửi bài mình cũng đã test:
1. Chỉ trên dữ liệu 1 sheet, không có dữ liệu ở sheet khác
2. Dự liệu key là giống nhau A3=A4 -> True
 
Upvote 0
Thế thì lại không có bài #2, và #3.

---
@Thớt:

Gõ vào C3: =A3=A4

xem ra cái gì

Hoặc khi chạy code thì sheet hiện hành đang ở một nơi xa xăm nào đó.
Không hẳn vậy đâu. Những người bị quyến rũ bởi độ hấp dẫn của đít sần hay bị quên học kỹ căn bản VBA.

Cells(...) là Object chứ không phải dữ liệu thường.

Những chỗ cần check:
1. Khi nạp dữ liệu string vào key, phải Trim nó trước.
2. Khi lấy dữ liệu từ Range, dùng thuộc tính Value. Không bao giờ tập cái thói quen xấu, bắt VBA tự động hiểu.

Tôi có thể khẳng định trên 68% là nếu bạn check typename của key và item code trên sẽ thấy chúng là objects.
 
Upvote 0
Xin chào các anh chị GPE

Em đang tìm hiểu Dictionary qua thread:
https://www.giaiphapexcel.com/diendan/threads/tổng-quan-về-scripting-dictionary.60643/

Trong đó có đoạn viết:

PHP:
MyDictionary.Add Key, Item
Item có nhận dữ liệu thuộc bất kì kiểu dữ liệu gì. Key cũng nhận như item nhưng ngoại trừ kiểu dữ liệu mảng (array). Key phải là duy nhất, nếu bạn thêm item với cùng một key, bạn sẽ gặp lỗi.

Em thử với cùng 1 key nhưng nhiều item khác nhau thì kết quả vẫn không thấy báo lỗi.
Vậy em đang sai ở đâu, nhờ các anh chị chỉ giúp

PHP:
Sub TestDic()
Dim Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
'Add dic key, item
For i = 3 To 7
    Dic.Add Cells(i, 1), Cells(i, 2)
Next
'Result to sheet
Range("E2").Resize(1, 5) = Dic.Keys
Range("E3").Resize(1, 5) = Dic.Items
End Sub

Xin cảm ơn mọi người.

View attachment 270719
Key đang là kiểu Range nên nó không trùng là đúng rồi. Thử Cells(i, 1).Value là nó báo trùng liền.
 
Upvote 0
Cảm ơn anh,

Chính xác là như vậy rồi anh ạ.
Sau khi thêm .value thì Dic đã báo lỗi.

Xin cảm ơn tất cả các anh chị đã giúp đỡ!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom