Sum array Scripting.Dictionary

Liên hệ QC

stao

Thành viên hoạt động
Tham gia
29/7/08
Bài viết
113
Được thích
26
Cho mình hỏi các sum khi thiết lập key với item là array trong Scripting.Dictionary.
Theo file ví dụ thì bị lỗi ở đây: Dic.Item(cell.Value) = Dic.Item(cell.Value) + Array(cell.Offset(, 1).Value, cell.Offset(, 2).Value, cell.Offset(, 3).Value)
Nhờ các Bác hướng dẫn giúp.
Cảm ơn nhiều.
 

File đính kèm

  • Sum array Dic.xlsm
    16.9 KB · Đọc: 9
Sao bạn không đưa hết vào mảng và thao tác trên cells làm gì cho chậm ra
 
Upvote 0
Cho mình hỏi các sum khi thiết lập key với item là array trong Scripting.Dictionary.
Theo file ví dụ thì bị lỗi ở đây: Dic.Item(cell.Value) = Dic.Item(cell.Value) + Array(cell.Offset(, 1).Value, cell.Offset(, 2).Value, cell.Offset(, 3).Value)
Nhờ các Bác hướng dẫn giúp.
Cảm ơn nhiều.

PHP:
Sub aSumdict()

Dim SArr, Tmp, Result
Dim DicT As Dictionary
Dim i, j, k, l As Integer

Set DicT = New Scripting.Dictionary


SArr = Range("B2:E12").Value
Tmp = Range("B3:B12").Value

ReDim Result(1 To 4, 1 To 4)
For i = 1 To UBound(Tmp, 1)
    If Not DicT.Exists(Tmp(i, 1)) Then
        j = j + 1
        DicT.Add Tmp(i, 1), j
        Result(j, 1) = Tmp(i, 1)
    End If
Next
For l = 1 To UBound(Result, 1)
    For k = 1 To UBound(SArr, 1)
        If SArr(k, 1) = Result(l, 1) Then
            Result(l, 2) = Result(l, 2) + SArr(k, 2)
            Result(l, 3) = Result(l, 3) + SArr(k, 3)
            Result(l, 4) = Result(l, 4) + SArr(k, 4)
        End If
    Next
Next
Range("H3").Resize(UBound(Result, 1), UBound(Result, 2)).Value = Result
End Sub


Đoạn code gợi ý cho bạn tham khảo
 
Upvote 0
...Đoạn code gợi ý cho bạn tham khảo
Thớt hỏi cách cộng Array mà bạn. Code của bạn né luôn vấn đề và đưa ra giải thuật khác.
Tuy giải thuật mới này hữu hiệu hơn, nhưng thớt vẫn sẽ mù tịt về cộng mảng.

Code đại khái (theo ý code bài #1:

Dim meArray
.
.
meArray = Dic(cell.Value)
For i = 0 To 2
meArray(i) = meArray(i) + cell.Offset(, i + 1).Value
Next i
Dic(cell.Value) = meArray

Hoặc là:
Dic(cell.Value) = Application.MMult(Array(1, 1), Array(Dic(cell.Value), Array(cell.Offset(, 1).Value, cell.Offset(, 2).Value, cell.Offset(, 3).Value)))
Hiểu rành mmult mới nên làm vầy. Không rành thì sai ráng chịu, nên dùng vòng lặp.
 
Upvote 0
Cảm ơn các Bác rất nhiều.
Cách của Bác VetMini đúng ý đồ mình cần tìm hiểu cộng mảng trong Scripting Dictionary. Mình sẽ tìm hiểu thêm MMult. Một lần nữa cảm ơn Bác.
 
Upvote 0
Web KT

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

Back
Top Bottom