- Tham gia
- 5/6/08
- Bài viết
- 30,703
- Được thích
- 53,954
Mình nghĩ dùng 2 vòng lập tách rời sẽ nhanh hơn kiểu vòng lập trong vòng lậpkính gởi các bạn mới tập tành vba, tôi có một bài tập viết code vba cho sumif
các bạn cho ý kiến nha
Mã:Public Sub GPE() Dim Dic As Object, sArr, v As Variant, I, Q As Long, key As String Set Dic = CreateObject("Scripting.Dictionary") [D5:D60000].ClearContents sArr = Range([b5], [b5].End(xlDown)).Resize(, 3).Value2 For I = 1 To UBound(sArr, 1) key = sArr(I, 1) If Not Dic.Exists(key) Then Dic.Add key, I sArr(I, 3) = sArr(I, 2) Else Dic.Item(key) = Dic.Item(key) & "@" & I Q = sArr(Split(Dic.Item(key), "@")(0), 3) For Each v In Split(Dic.Item(key), "@") sArr(v, 3) = Q + sArr(I, 2) Next End If Next I [b5].Resize(I - 1, 3) = sArr Set Dic = Nothing End Sub
Tức là thế này:
Mã:
Public Sub GPE()
Dim dic As Object, i As Long, sArr, key As String, item As Double
Set dic = CreateObject("Scripting.Dictionary")
[D5:D60000].ClearContents
sArr = Range([b5], [b5].End(xlDown)).Resize(, 3).Value2
For i = 1 To UBound(sArr, 1)
key = sArr(i, 1): item = sArr(i, 2)
If Not dic.Exists(key) Then
dic.Add key, item
Else
dic.item(key) = dic.item(key) + item
End If
Next i
For i = 1 To UBound(sArr, 1)
key = sArr(i, 1)
sArr(i, 3) = dic.item(key)
Next i
[b5].Resize(i - 1, 3) = sArr
Set dic = Nothing
End Sub
(cái mình chắc nhất là.. dễ hiểu. Ẹc... Ẹc...)