Về CreateObject("Scripting.Dictionary") trong VBA

  • Thread starter thanhphuongvip
  • Ngày gửi
T

thanhphuongvip

Guest
Xin chào mọi người,
Mình mới học VBA, thấy nhiều code có viết sử dụng dòng code CreateObject("Scripting.Dictionary"), ví dụ trong code tính SUMIF này

Mã:
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), I As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range([B5], [B5].End(xlDown)).Resize(, 5).Value2
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
    Tem = sArr(I, 1)
    If Not Dic.Exists(Tem) Then
        Dic.Add Tem, sArr(I, 5)
    Else
        Dic.Item(Tem) = Dic.Item(Tem) + sArr(I, 5)
    End If
Next I
For I = 1 To UBound(sArr, 1)
    dArr(I, 1) = Dic.Item(sArr(I, 1))
Next I
[H5].Resize(I - 1) = dArr
Set Dic = Nothing
End Sub
Mình muốn biết cái này có tác dụng gì và sử dụng trong trường hợp nào? Hoặc có tài liệu nói về này thì cho mình xin cũng đc.

Mình có đọc trên goole rồi nhưng thật sự chưa hiểu lắm.
Xin cảm ơn!
 
S

Snow24

Guest
Xin chào mọi người,
Mình mới học VBA, thấy nhiều code có viết sử dụng dòng code CreateObject("Scripting.Dictionary"), ví dụ trong code tính SUMIF này

Mã:
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), I As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range([B5], [B5].End(xlDown)).Resize(, 5).Value2
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
    Tem = sArr(I, 1)
    If Not Dic.Exists(Tem) Then
        Dic.Add Tem, sArr(I, 5)
    Else
        Dic.Item(Tem) = Dic.Item(Tem) + sArr(I, 5)
    End If
Next I
For I = 1 To UBound(sArr, 1)
    dArr(I, 1) = Dic.Item(sArr(I, 1))
Next I
[H5].Resize(I - 1) = dArr
Set Dic = Nothing
End Sub
Mình muốn biết cái này có tác dụng gì và sử dụng trong trường hợp nào? Hoặc có tài liệu nói về này thì cho mình xin cũng đc.

Mình có đọc trên goole rồi nhưng thật sự chưa hiểu lắm.
Xin cảm ơn!
Code sumif này hơi lạ.Vì nó tính tổng cho cả mảng data dữ liệu mà không phải duy nhất.Bạn nên hiểu Dic nó chỉ có tác dụng đó là lọc duy nhất theo keys và lưu được mảng theo giá trị duy nhất đó.Bạn phải hiểu Dic nó chỉ là lưu thông tin theo item thôi còn đâu phụ thuộc vào mình lưu cái gì theo dạng gì thôi.
 
Top