|
1、你代码虽然不长,但我看起来还是很晦涩。在你基础上,我按照自己的理解重写了代码:Range("i6:p37").ClearContents
Set d = CreateObject("Scripting.Dictionary")
arr = Range("a5", [f65536].End(3)).Value
Dim arr1(1 To 6)
Dim arr2
For i = 5 To [a100000].End(3).Row
s = Cells(i, 2) & "," & Cells(i, 3)
If d.exists(s) Then
arr2 = d(s)
s1 = Mid(Trim(Cells(i, 4)), 1, 1)
arr2(s1) = arr2(s1) + Cells(i, 5)
d(s) = arr2
Else
For k = 1 To 6
arr1(k) = 0
Next k
s1 = Mid(Trim(Cells(i, 4)), 1, 1)
arr1(s1) = Cells(i, 5)
d(s) = arr1
End If
Next
Dim brr
brr = d.Keys
hs = 5
For i = 0 To UBound(brr)
s = Split(brr(i), ",")
If (s(0) <> Cells(hs, "i")) Or (s(1) <> Cells(hs, "j")) Then
hs = hs + 1
End If
Cells(hs, "i") = s(0)
Cells(hs, "j") = s(1)
arr2 = d(brr(i))
Cells(hs, "k") = arr2(1)
Cells(hs, "l") = arr2(2)
Cells(hs, "m") = arr2(3)
Cells(hs, "n") = arr2(4)
Cells(hs, "o") = arr2(5)
Cells(hs, "p") = arr2(6)
Next
2、基于你的数据,实际汇总结果并不涉及合并单元格,因为你的数据非常巧合:日期相同的名称也正好相同,所以不足以产生多行。汇总结果:
日期 | 门店 | 1号店 | 2号店 | 3号店 | 发货日期 | 名称 | 1档 | 2档 | 3档 | 4档 | 5档 | 6档 | 2020-01-06 | 白净套装 | 198.00 | 298.00 | 398.00 | 498.00 | 598.00 | 698.00 | 2020-01-07 | 滋润套装 | 98.00 | 198.00 | 298.00 | 398.00 | 498.00 | 598.00 |
3、我把你的数据稍微修改了下,以增加合并的多样性,修改后的数据:
系统时间 | 发货时间 | 名称 | 档次 | 金额 | 门店 | 2020/1/6 11:37 | 2020-01-06 | 白净套装 | 1档 | 198.00 | 1号店 | 2020/1/6 11:37 | 2020-01-06 | 白净套装1 | 2档 | 298.00 | 1号店 | 2020/1/6 11:37 | 2020-01-06 | 白净套装 | 3档 | 398.00 | 2号店 | 2020/1/6 11:37 | 2020-01-06 | 白净套装 | 4档 | 498.00 | 2号店 | 2020/1/6 11:37 | 2020-01-06 | 白净套装 | 5档 | 598.00 | 3号店 | 2020/1/6 11:37 | 2020-01-06 | 白净套装 | 6档 | 698.00 | 3号店 | 2020/1/7 11:37 | 2020-01-07 | 滋润套装 | 1档 | 98.00 | 1号店 | 2020/1/7 11:37 | 2020-01-07 | 滋润套装2 | 2档 | 198.00 | 1号店 | 2020/1/7 11:37 | 2020-01-07 | 滋润套装 | 3档 | 298.00 | 2号店 | 2020/1/7 11:37 | 2020-01-07 | 滋润套装 | 4档 | 398.00 | 2号店 | 2020/1/7 11:37 | 2020-01-07 | 滋润套装 | 5档 | 498.00 | 3号店 | 2020/1/7 11:37 | 2020-01-07 | 滋润套装 | 6档 | 598.00 | 3号店 |
在第二行的名称后面增加了数字1,同样在第8行也增加了数字1,汇总结果变成了:
日期 | 门店 | 1号店 | 2号店 | 3号店 | 发货日期 | 名称 | 1档 | 2档 | 3档 | 4档 | 5档 | 6档 | 2020-01-06 | 白净套装 | 198.00 | | 398.00 | 498.00 | 598.00 | 698.00 | 2020-01-06 | 白净套装1 | | 298.00 | | | | | 2020-01-07 | 滋润套装 | 98.00 | | 298.00 | 398.00 | 498.00 | 598.00 | 2020-01-07 | 滋润套装2 | | 198.00 | | | | |
4、其实这类汇总正是数据透视的强项,自己写代码反而多余。关于数据透视,楼上爱疯版主已有详细说明,我只是列出结果(按修改后的数据):
求和项:金额 | | 门店 | 档次 | | | | | | | | 1号店 | 1号店 | 2号店 | 2号店 | 3号店 | 3号店 | 总计 | 发货时间 | 名称 | 1档 | 2档 | 3档 | 4档 | 5档 | 6档 | | 2020-01-06 | 白净套装 | 198 | | 398 | 498 | 598 | 698 | 2390 | 2020-01-06 | 白净套装1 | | 298 | | | | | 298 | 2020-01-07 | 滋润套装 | 98 | | 298 | 398 | 498 | 598 | 1890 | 2020-01-07 | 滋润套装2 | | 198 | | | | | 198 | 总计 | | 296 | 496 | 696 | 896 | 1096 | 1296 | 4776 | 这个结果与代码汇总的结果相同;
5、关于合并单元格,在汇总过程中并没有考虑对合并单元格的处理,因为汇总结果有多少行是很难预料的,比如你原数据只有2行,不需要合并单元格。我修改后的数据结果有4行,按你要求就需要合并单元格。我的建议是,在汇总完成后,再用一个循环遍历一次汇总结果表,如果一个日期有多个行,再用代码对日期进行合并,如果一个日期只有一行就跳过。
我个人不建议合并单元格,数据透视的风格大致也是如此,所以这个最后的合并我也没写。你自己加一个就好了。
|
评分
-
查看全部评分
|