Hỏi về scripting.dictionary

Liên hệ QC

namhandsome1

Thành viên mới
Tham gia
11/9/16
Bài viết
38
Được thích
3
Hiện tại em đang tìm hiểu về scripting.dictionary. Theo ý hiểu của em thì mỗi 1 Item nó giống như 1 cái TÚI để chứa dữ liệu và tên của từng cái TÚI đó là KEY. Cho em hỏi ngu xíu là giờ em muốn gọi 1 cái túi với tên cụ thể thì dùng phương thức nào với ạ? Thanks các bác ạ?
 
Hiện tại em đang tìm hiểu về scripting.dictionary. Theo ý hiểu của em thì mỗi 1 Item nó giống như 1 cái TÚI để chứa dữ liệu và tên của từng cái TÚI đó là KEY. Cho em hỏi ngu xíu là giờ em muốn gọi 1 cái túi với tên cụ thể thì dùng phương thức nào với ạ? Cảm ơn các bác ạ?
Hình như là thế này
Mã:
dim ijk, xyz
for each xyz in dic.keys
    ijk = ijk & " " & dic.item(xyz)
next xyz
range("a1") = ijk
 
Upvote 0
Hình như là thế này
Mã:
dim ijk, xyz
for each xyz in dic.keys
    ijk = ijk & " " & dic.item(xyz)
next xyz
range("a1") = ijk
For i = LBound(ArrTK, 1) To UBound(ArrTK, 1)
ArrTK(i, 3) = Null
iKey = ArrTK(i, 1)
If Not .exists(iKey) Then
.Add (iKey), 0
End If
Next i


KQ: em ép được 100 Item, giờ dùng vòng lặp ntn để em in được 100 item này ra excel hả bác?
Bài đã được tự động gộp:

Bạn gửi file ví dụ lên thì sẽ giải thích dễ hơn!
đây bác ạ, em muốn tính tổng tồn chỉ bằng 1 vòng lặp riêng biệt. Thanks các bác
 

File đính kèm

  • vdDic.xlsm
    16.7 KB · Đọc: 6
Lần chỉnh sửa cuối:
Upvote 0
For i = LBound(ArrTK, 1) To UBound(ArrTK, 1)
ArrTK(i, 3) = Null
iKey = ArrTK(i, 1)
If Not .exists(iKey) Then
.Add (iKey), 0
End If
Next i


KQ: em ép được 100 Item, giờ dùng vòng lặp ntn để em in được 100 item này ra excel hả bác?
Bạn khai báo thêm biến i, rồi chép 4 dòng dưới đây vào sau dòng Next I. Kết quả sẽ điền xuống sheet hiện hành
Mã:
ikey = .keys
for i = 0 to ubound(ikey)
    range("a" & i + 1) = .item(ikey(i))
next i
 
Upvote 0
Bạn khai báo thêm biến i, rồi chép 4 dòng dưới đây vào sau dòng Next I. Kết quả sẽ điền xuống sheet hiện hành
Mã:
ikey = .keys
for i = 0 to ubound(ikey)
    range("a" & i + 1) = .item(ikey(i))
next i
bác có thể giải quyết bài toàn ở file ví dụ em gửi được không ạ?
 
Upvote 0
bác có thể giải quyết bài toàn ở file ví dụ em gửi được không ạ?
Một vòng lặp thì dùng code này
Mã:
Sub VD_DIC_()
Dim i, endrow As Long
Dim Arr As Variant
Dim iKey As String
Dim Res As Variant
Dim iItem
Dim j
endrow = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Arr = Sheet1.Range("A2:B" & endrow).Value
ReDim Res(1 To UBound(Arr), 1 To UBound(Arr, 2))
With CreateObject("scripting.dictionary")
For i = LBound(Arr, 1) To UBound(Arr, 1)
    iKey = Arr(i, 1)
    If .exists(iKey) = False Then
        j = j + 1
        Res(j, 1) = Arr(i, 1)
        Res(j, 2) = Arr(i, 2)
        .Add iKey, j
    Else
        iItem = .Item(iKey)
        Res(iItem, 2) = Res(iItem, 2) + Arr(i, 2)
    End If
Next i
End With
Sheet2.Range("d2").Resize(j, UBound(Res, 2)) = Res
End Sub
Hai vòng lặp thì dung code này
Mã:
Sub VD_DIC__()
Dim i, endrow As Long
Dim Arr As Variant
Dim iKey
Dim Res As Variant
Dim iItem
Dim j
endrow = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Arr = Sheet1.Range("A2:B" & endrow).Value
With CreateObject("scripting.dictionary")
For i = LBound(Arr, 1) To UBound(Arr, 1)
    iKey = Arr(i, 1)
    If .exists(iKey) = False Then
        .Add iKey, Arr(i, 2)
    Else
        iItem = .Item(iKey)
        iItem = iItem + Arr(i, 2)
        .Item(iKey) = iItem
    End If
Next i
ReDim Res(1 To .Count, 1 To UBound(Arr, 2))
iKey = .keys
iItem = .items
For i = 0 To UBound(iKey)
    Res(i + 1, 1) = iKey(i)
    Res(i + 1, 2) = iItem(i)
Next i
End With
Sheet2.Range("d2").Resize(UBound(Res), UBound(Res, 2)) = Res
End Sub
Nếu bạn mới sử dùng dic thì 2 vòng lặp sẽ dễ hiểu hơn
Khai báo arr của bạn hình như bị nhầm sheet
 
Upvote 0
Một vòng lặp thì dùng code này
Mã:
Sub VD_DIC_()
Dim i, endrow As Long
Dim Arr As Variant
Dim iKey As String
Dim Res As Variant
Dim iItem
Dim j
endrow = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Arr = Sheet1.Range("A2:B" & endrow).Value
ReDim Res(1 To UBound(Arr), 1 To UBound(Arr, 2))
With CreateObject("scripting.dictionary")
For i = LBound(Arr, 1) To UBound(Arr, 1)
    iKey = Arr(i, 1)
    If .exists(iKey) = False Then
        j = j + 1
        Res(j, 1) = Arr(i, 1)
        Res(j, 2) = Arr(i, 2)
        .Add iKey, j
    Else
        iItem = .Item(iKey)
        Res(iItem, 2) = Res(iItem, 2) + Arr(i, 2)
    End If
Next i
End With
Sheet2.Range("d2").Resize(j, UBound(Res, 2)) = Res
End Sub
Hai vòng lặp thì dung code này
Mã:
Sub VD_DIC__()
Dim i, endrow As Long
Dim Arr As Variant
Dim iKey
Dim Res As Variant
Dim iItem
Dim j
endrow = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Arr = Sheet1.Range("A2:B" & endrow).Value
With CreateObject("scripting.dictionary")
For i = LBound(Arr, 1) To UBound(Arr, 1)
    iKey = Arr(i, 1)
    If .exists(iKey) = False Then
        .Add iKey, Arr(i, 2)
    Else
        iItem = .Item(iKey)
        iItem = iItem + Arr(i, 2)
        .Item(iKey) = iItem
    End If
Next i
ReDim Res(1 To .Count, 1 To UBound(Arr, 2))
iKey = .keys
iItem = .items
For i = 0 To UBound(iKey)
    Res(i + 1, 1) = iKey(i)
    Res(i + 1, 2) = iItem(i)
Next i
End With
Sheet2.Range("d2").Resize(UBound(Res), UBound(Res, 2)) = Res
End Sub
Nếu bạn mới sử dùng dic thì 2 vòng lặp sẽ dễ hiểu hơn
Khai báo arr của bạn hình như bị nhầm sheet
sao mình chạy nó ko ra kết quả nhỉ
 
Upvote 0
Hiện tại em đang tìm hiểu về scripting.dictionary. Theo ý hiểu của em thì mỗi 1 Item nó giống như 1 cái TÚI để chứa dữ liệu và tên của từng cái TÚI đó là KEY. Cho em hỏi ngu xíu là giờ em muốn gọi 1 cái túi với tên cụ thể thì dùng phương thức nào
Bạn đang tìm hiểu ở đâu mà lại hỏi lý thuyết (gọi tới 1 item trong Dictionary)?

1538120280033.png
.
Bài #1 thì nói gọi tới 1 cái, bài #5 thì lại nói là 100????
in được 100 item này ra excel
Nếu bạn nói cần 100 items kia thì 100 đó đều có trị bằng 0, vì .Add (iKey), 0
Theo như bạn đang làm là lấy Keys, chứ không phải items.
Không biết bạn tìm hiểu ở đâu mà khái niệm đối tượng gọi lung tung hết lên?
1538120541290.png

Bản thân Dictionary có sẵn 2 phương thức để lấy toàn bộ Keys, Items có trong nó.

1538120673668.png
 
Upvote 0
Bạn đang tìm hiểu ở đâu mà lại hỏi lý thuyết (gọi tới 1 item trong Dictionary)?

View attachment 204676
.
Bài #1 thì nói gọi tới 1 cái, bài #5 thì lại nói là 100????

Nếu bạn nói cần 100 items kia thì 100 đó đều có trị bằng 0, vì .Add (iKey), 0
Theo như bạn đang làm là lấy Keys, chứ không phải items.
Không biết bạn tìm hiểu ở đâu mà khái niệm đối tượng gọi lung tung hết lên?
View attachment 204677

Bản thân Dictionary có sẵn 2 phương thức để lấy toàn bộ Keys, Items có trong nó.

View attachment 204678
https://www.giaiphapexcel.com/diendan/threads/tổng-quan-về-scripting-dictionary.60643/
 
Upvote 0
Túi với ngăn cái quái gì.
Dictionary làm việc đúng theo tên của nó: từ điển.
Key tức là từ để tra và item tức là cái nghĩa mà nó dịch ra.

Nếu bạn ghi vào từ điển TD1 từ khoá (key) "chó" và định nghĩa (item) là "kêu meo meo" thì cứ giở TD1 ra tra từ khoá "chó" sẽ thấy nó kêu meo meo.
Tương tự, cùng một từ "con" nếu tra từ điển Việt ngữ sẽ thấy nó dịch là "đứa con", tra từ điển Anh sẽ thấy nó dịch là "lừa lọc", và tra từ điển tiếng Ý sẽ thấy nó dịch là "với".
 
Upvote 0
Web KT
Back
Top Bottom