42、[VBA入门到放弃笔记]字典应用:求和

2017-07-03  本文已影响87人  叶知行

字典常常用来进行求和。

源数据
Sub 求和()
    Dim arr, i As Long, d As Object
    arr = [a1].CurrentRegion'数组赋值
    Set d = CreateObject("scripting.dictionary")'创建字典
    For i = 2 To UBound(arr)'遍历数组
        d(arr(i, 1)) = d(arr(i, 1)) + arr(i, 2)'对部门进行求和
    Next
    [d2].Resize(d.Count, 1) = Application.Transpose(d.keys)'输出数据
    [e2].Resize(d.Count, 1) = Application.Transpose(d.items)
End Sub
结果
源数据
Sub 求和()
    Dim arr, i As Long, d As Object
    arr = [a1].CurrentRegion '数据放进数组arr
    '定义一个和arr一样大小的数组brr来存放求和数据
    ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
    Set d = CreateObject("scripting.dictionary") '创建字典
    For i = 2 To UBound(arr) '遍历数组
        '如果部门没有添加到字典里(第一次肯定不会存在字典里)
        If Not d.exists(arr(i, 1)) Then
            k = k + 1 '计数
            d(arr(i, 1)) = k '字典标识行,存入字典
            For j = 1 To UBound(arr, 2) '将第一条数据,从arr放进brr
                brr(k, j) = arr(i, j)
            Next
        Else '如果部门已经在字典里面了
            m = d(arr(i, 1)) '读取字典标识的行,如A,m=1,B,m=2.......
            brr(m, 2) = brr(m, 2) + arr(i, 2) '数据累加,字段1
            brr(m, 3) = brr(m, 3) + arr(i, 3)'字段2
            brr(m, 4) = brr(m, 4) + arr(i, 4)'字段3
        End If
    Next
    [g2].Resize(k, 4) = brr
End Sub
例子 结果
上一篇 下一篇

猜你喜欢

热点阅读