|
代码写好了,你先去试下效果。有一个数据我找不到:颜色,那一栏就只能空着;
你这个表我感觉似曾相识,我似乎也曾写过类似的代码。当然重写一次也没有多大难度。
如果你自己有vba代码基础,可以自己根据需要修改,没基础就不要乱改,尤其是前两个表的顺序不要动,因为代码是指定从第三个表开始汇总到最后一个表,然后把汇总结果写入到当前表中。
下面是一些重要参数的说明,便与你自己修改代码,只对我认为关键的地方做说明:
Dim arr(1 To 100, 6) '定义数组,分别对应c到J列,但不包含e列的颜色,如果你需要颜色,就把数组列数再增加到 7 ;
数组的最大行是100,这个我不确定,你根据需要增减;
hs = 5 '起始行是第5行,前面是表头
ri = Cells(3, "j") '读出日期
For i = 3 To Worksheets.Count '从第3个表统计到最后一个,第2个表我不知道是干什么的,我也没管它
If Worksheets(i).Cells(k, "j") = ri Then '对符合日起定义的记录进行统计
For j = 1 To 4 '每个单元最大为 4 行,如果你修改了单元最大行数,这里相应变化
bz = False '下面是数组检索,判断是否是重复数据,重复的数据进行合并统计,不重复的新增数据就添加到数组的后面
For l = 1 To js
If Worksheets(i).Cells(k + j + 1, 4) = arr(l, 1) Then
bz = True
ls = l
Exit For
End If
Next l
If bz Then '这里是重复数据的处理,只统计数量、重量、金额,文本类型的不需要合并
arr(l, 2) = arr(l, 2) + Worksheets(i).Cells(k + j + 1, 7)
arr(l, 3) = arr(l, 2) + Worksheets(i).Cells(k + j + 1, 8)
arr(l, 5) = arr(l, 2) + Worksheets(i).Cells(k + j + 1, 10)
Else '下面是新增的不重复数据,要写入完整的全部数据到数组
js = js + 1
arr(js, 1) = Worksheets(i).Cells(k + j + 1, 4)
arr(js, 2) = Worksheets(i).Cells(k + j + 1, 7)
arr(js, 3) = Worksheets(i).Cells(k + j + 1, 8)
arr(js, 4) = Worksheets(i).Cells(k + j + 1, 9)
arr(js, 5) = Worksheets(i).Cells(k + j + 1, 10)
arr(js, 6) = Worksheets(i).Cells(k + j + 1, 11)
End If
For k = 1 To js '把数组写入当前汇总表,颜色那一列是跳过的
Cells(hs, 2) = hs - 4
Cells(hs, 3) = Worksheets(i).Name
Cells(hs, 4) = arr(k, 1)
Cells(hs, 6) = arr(k, 2)
Cells(hs, 7) = arr(k, 3)
Cells(hs, 8) = arr(k, 4)
Cells(hs, 9) = arr(k, 5)
Cells(hs, 10) = arr(k, 6)
hs = hs + 1
Next k
下面是写入最后的总合计,用的是sum函数。用代码汇总也行,只是觉得没必要。工作表函数我认为就这个是可以随便用的,其他的不建议用:
Cells(hs, 2) = "合 计"
Cells(hs, 6) = "=sum(f5:f" & hs - 1 & ")"
Cells(hs, 7) = "=sum(g5:g" & hs - 1 & ")"
Cells(hs, 9) = "=sum(i5:i" & hs - 1 & ")"
|
评分
-
查看全部评分
|