楼主 Zaezhong |
Q:有成本表和销售表各一张具体如下图,现在需要根据这两张表汇总每一样商品的相关销售数据,如单位成本,销售数量等,如何实现满足汇总表的表头设置的表格汇总?
A:代码如下- Sub Zae()
- Dim d, arr, brr, i&, j&, Rst(1 To 10000, 1 To 62), K, N1%, N2%
- Set d = CreateObject("scripting.dictionary") '创建字典对象引用
- arr = Sheets("数据源收入").[A1].CurrentRegion: brr = Sheets("数据源成本").[A1].CurrentRegion '将两张表的已用部分赋值给两个数组
- For i = 2 To UBound(arr) - 1 '忽略第一行和最后一行
- N1 = Month(arr(i, 1)) '得到月份
- If d.exists(arr(i, 2) & "|" & arr(i, 3)) Then '如果已经存在字典中
- Rst(d(arr(i, 2) & "|" & arr(i, 3)), 5 * N1 - 2) = Rst(d(arr(i, 2) & "|" & arr(i, 3)), 5 * N1 - 2) + arr(i, 4) '累计销售数量
- Rst(d(arr(i, 2) & "|" & arr(i, 3)), 5 * N1) = Rst(d(arr(i, 2) & "|" & arr(i, 3)), 5 * N1) + arr(i, 5) '累计销售收入
- Else
- j = j + 1 '字典计算
- d(arr(i, 2) & "|" & arr(i, 3)) = j
- Rst(d(arr(i, 2) & "|" & arr(i, 3)), 5 * N1 - 2) = arr(i, 4) '合并后为前面两列赋值准备
- Rst(d(arr(i, 2) & "|" & arr(i, 3)), 5 * N1 - 1) = arr(i, 5) / arr(i, 4) '计算单价
- Rst(d(arr(i, 2) & "|" & arr(i, 3)), 5 * N1) = arr(i, 5) '累计收入
- End If
- Next
- For i = 2 To UBound(brr) - 1 '在成本表循环
- N2 = Month(brr(i, 1)) '得到月份
- Rst(d(brr(i, 2) & "|" & brr(i, 3)), 5 * N2 + 2) = Rst(d(brr(i, 2) & "|" & brr(i, 3)), 5 * N2 + 2) + brr(i, 5) '累计销售成本
- Rst(d(brr(i, 2) & "|" & brr(i, 3)), 5 * N2 + 1) = brr(i, 5) / brr(i, 4) '计算单位成本
- Next
- K = d.keys '将字典的关键词数组赋值给一个新数组
- For i = 0 To d.Count - 1
- Rst(i + 1, 1) = Split(K(i), "|")(0): Rst(i + 1, 2) = Split(K(i), "|")(1) '为前面两列添加内容
- Next
- Sheets("多条件分类汇总").Columns(1).NumberFormatLocal = "@" '第一列设置文本格式,防止最后一位是0时丢失
- With Sheets("多条件分类汇总").[A3].Resize(j, 62)
- .ClearContents '删除内容
- .Value = Rst '写入到工作表
- End With
- Set d = Nothing '清空字典对象
- End Sub
分类汇总.zip |