求VBA分类汇总代码
BC的值如有需要可互换。数据有300多行。
现在要达到以下目的(可以使用任何多个辅助):
1:先按材料Ab进行分类,并且ABCdf值都相同的情况下e值相加。
2:按AB列中值出现的总数量多的排在前面,
例:材料A,378 总数量出现17
材料A 548总数量出现14次,但有一次F值不同,要分开
希望只用一个按纽就能解决.如有做好的请发ok100ptq@yahoo.com.cn 展开
2024-09-19 广告
结果太复杂了,我想更简单一点的,用VBA,一次就搞定。
以前有个网友给我做了一次,但那次数据和这次不一样,我不会修改代码,所以………………
那么就用VBA吧:
Sub abc()
Dim r, data_str
Dim sht As Worksheet
Dim c As Range
Set sht = Worksheets("分类汇总")
sht.Cells.Clear ' 清除原有汇总数据
With ActiveSheet
.Rows(1).Copy Destination:=sht.Rows(1) ' 复制标题行
For r = 2 To 500 ' 请修改为实际的数据行数
If .Range("D" & r) <> "" Then ' 跳过空行
data_str = Range("B" & r) & Range("C" & r) & Range("D" & r) & Range("F" & r)
Set c = sht.Range("A:A").Find(data_str, LookIn:=xlValues, lookat:=xlWhole) ' 在分类汇总表中查找相同数据项
If c Is Nothing Then Set c = sht.Range("A1048576").End(xlUp).Offset(1, 0) ' 如果未找到,则定位新记录行
.Range(.Range("B" & r), .Range("D" & r)).Copy Destination:=c.Offset(0, 1) ' 复制尺寸1、尺寸2、材料到汇总表
.Range("F" & r).Copy Destination:=c.Offset(0, 5) ' 复制处理方法到汇总表
c.Offset(0, 4) = c.Offset(0, 4) + .Range("E" & r) ' 统计数量
c.FormulaR1C1 = "=RC[1]&RC[2]&RC[3]&RC[5]" ' 设置索引公式
c.Offset(0, 6).FormulaR1C1 = "=sumifs(C[-2]:c[-2], c[-4]:c[-4], rc[-4], c[-3]:c[-3], rc[-3])" ' 设置排序辅助列
End If
Next r
End With
With sht
.Range("A:G").Sort key1:=.Range("G1"), order1:=xlDescending, key2:=.Range("E1"), order2:=xlDescending, Header:=xlYes ' 排列汇总数据
.Range("A:A").Clear ' 清除辅助索引
.Activate
End With
End Sub