excel vba中,如果A列相同,则对应B列数据求和

excel vba中,如果A列相同,则对应B列数据求和A 1
A 2
A 3
B 2
B 3
B 4
C 3
C 4
最后输出:
A 6
B 9
C 7
这样

    思路是筛选出不重复数据,再对不重复数据分类求和,单条件求和用SUMIF就可。

    录制筛选的宏、去重复的宏,再对宏编辑为自己的宏,删除录制的宏。

    Sub test()

    Dim ls As Integer

    Dim ll As Integer   

    Dim ss As Integer

    ls = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row '统计A列行数

    Columns("A:A").Select

    Application.CutCopyMode = False

    ActiveSheet.Range("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("XFD1"), Unique:=True '筛选A列不重复数据,放到最后一列

    ActiveSheet.Range("XFD:XFD").RemoveDuplicates Columns:=1, Header:=xlNo '去掉筛选出的重复数据,因筛选会自建表头(EXCEL2016版)

    ll = Application.WorksheetFunction.CountA(ActiveSheet.Range("XFD:XFD"))

    Do                                                                      '对筛选数据分类求和并输出

    ss = ss + 1

    ActiveSheet.Range("C" & ss) = ActiveSheet.Range("XFD" & ss) & "=" & Application.WorksheetFunction.SumIf(ActiveSheet.Range("A:A"), ActiveSheet.Range("XFD" & ss), ActiveSheet.Range("B:B"))

    Loop Until ss = ll

    End Sub

    百度自动生成序号,VBA中是没有的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-10

提供一个通用的字典求和代码供参考,对学习字典求和会有帮助的,右击图片,选择在新标签页中打开(T),GIF动画是完好的,不知道为什么这里动画是这个样子。

Sub a()
    Dim rng As Range
    Dim d As Object
    Set d = CreateObject("scripting.dictionary")
    For Each rng In Range("a1:a7")
        If Not d.exists(rng.Value) Then
           d.Add rng.Value, Range(rng.Address).Offset(, 1).Value
        Else
           d(rng.Value) = d(rng.Value) + Range(rng.Address).Offset(, 1).Value
        End If
    Next
    Range("f1").Resize(d.Count, 2) = Application.Transpose(Array(d.Keys, d.items))
    Set d = Nothing
    Set rng = Nothing
End Sub

第2个回答  2017-12-10

推荐sumif函数。

公式如下图:

第3个回答  2017-12-10
用函数求和也很简单容易做到
第4个回答  2017-12-10
字典求和,或者函数的条件求和
相似回答