excel vba中,如果A列相同,则对应B列数据求和 50
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中是没有的。
提供一个通用的字典求和代码供参考,对学习字典求和会有帮助的,右击图片,选择在新标签页中打开(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