ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: ty1014

[求助] 求用字典写个汇总代码

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-22 14:30 | 显示全部楼层
CC例例 发表于 2018-7-22 13:00
k是一维数组,存放的元素是3个费率,下标是0,而变量x起始的值是2,所以减2

新序号        供应商        型号        名称
1        A        L7B-01-04        制动轮
2        A        L2W-01-06B        制动轮
3        A        L2W-01-06B        制动轮
4        A        L7B-01-04        制动轮
5        A        L5I-01-04        制动轮
6        A        L5I-01-04        制动轮
7        A        L7B-01-04        制动轮
8        A        L5I-01-04        制动轮
9        A        L7B-01-04        制动轮
                (1)A小计(1):1-9项之和       
                (2)销售费:小计(1)×1.5%       
                (3)手续费:小计(1)×1.2%       
                (4)保管费:小计(1)×1.4%       
                合计(1):(1)-(4)之和       
10        B        L5I-01-04        制动轮
朋友,能不能在小计后面加上一个序号,这是A类的,余下类推,谢谢

TA的精华主题

TA的得分主题

发表于 2018-7-22 15:03 | 显示全部楼层
ty1014 发表于 2018-7-22 14:30
新序号        供应商        型号        名称
1        A        L7B-01-04        制动轮
2        A        L2W-01-06B        制动轮
  1. Sub 分类汇总()
  2.     Dim d As Object, arA, arB, arC, k()
  3.     Dim i&, x&, y&, j%, c%, p%, x1&, x2&, n As Double, n1 As Double, n2 As Double
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     arC = Sheet2.Range("n1").CurrentRegion
  6.     Range("a1").CurrentRegion.Offset(2).ClearContents
  7.     For i = 3 To UBound(arC)
  8.         ReDim k(2)
  9.         For x = 2 To 4
  10.             k(x - 2) = arC(i, x)
  11.         Next
  12.         d(arC(i, 1)) = k
  13.     Next
  14.     arA = Sheet2.Range("a3:i" & Sheet2.Cells(Rows.Count, 1).End(3).Row + 1)
  15.     ReDim arB(1 To UBound(arA) + d.Count * 5, 1 To UBound(arA, 2))
  16.     For i = 1 To UBound(arA) - 1
  17.          If i = 1 Then x1 = arA(i, 1)
  18.          n = n + arA(i, 8)
  19.          y = y + 1
  20.          For x = 1 To UBound(arA, 2)
  21.              arB(y, x) = arA(i, x)
  22.          Next
  23.          If arA(i, 2) <> arA(i + 1, 2) Then
  24.              j = Application.CountA(d(arA(i, 2)))
  25.              c = c + 1
  26.              x2 = arA(i, 1)
  27.              If j > 0 Then
  28.                  y = y + 1
  29.                  p = p + 1
  30.                  arB(y, 3) = "(" & p & ")" & arA(i, 2) & "小计(" & c & "):" & x1 & "-" & x2 & "项之和"
  31.                  arB(y, 8) = n
  32.                  k = d(arA(i, 2))
  33.                  For x = 0 To UBound(k)
  34.                      If Trim(k(x)) <> "" Then
  35.                          y = y + 1
  36.                          p = p + 1
  37.                          arB(y, 3) = "(" & p & ")" & Replace(arC(2, x + 2), "率", "") & "小计×" & k(x) * 100 & "%"
  38.                          arB(y, 8) = Round(n * k(x), 2)
  39.                          n1 = n1 + arB(y, 8)
  40.                      End If
  41.                  Next
  42.              End If
  43.              y = y + 1
  44.              arB(y, 3) = IIf(p = 0, arA(i, 2), "") & "合计(" & c & "):" & IIf(p > 0, "(1)-(" & p & ")之和", x1 & "-" & x2 & "项之和")
  45.              arB(y, 8) = n + n1
  46.              n2 = n2 + arB(y, 8)
  47.              n = 0
  48.              n1 = 0
  49.              p = 0
  50.              x1 = arA(i + 1, 1)
  51.          End If
  52.     Next
  53.     y = y + 2
  54.     arB(y, 3) = "总计:合计(1)-(" & c & ")之和"
  55.     arB(y, 8) = n2
  56.     Range("a3").Resize(y, UBound(arB, 2)) = arB
  57. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-22 15:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-22 17:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

代码速度很快,不错,虽然有的地方还看不明白,谢谢。
如果黄色区域中数据为0,能不能加个判断直接算总计,而不要里面的合计(5)合计(6)类的这些行,只要总计行。谢谢
        E合计(5):28-32项之和                                        508006       
F        L5N-01-05        制动轮        只        220        1901        418220        行420341
F        L5N-01-06        制动轮        只        155        1902        294810        296867
        F合计(6):33-34项之和                                        713030       
                                                       
        总计:合计(1)-(6)之和                                        6504796       
                                                       

TA的精华主题

TA的得分主题

发表于 2018-7-22 19:01 | 显示全部楼层
ty1014 发表于 2018-7-22 17:28
代码速度很快,不错,虽然有的地方还看不明白,谢谢。
如果黄色区域中数据为0,能不能加个判断直接算总 ...
  1. Sub 分类汇总()
  2.     Dim d As Object, arA, arB, arC, k()
  3.     Dim i&, x&, y&, c%, p%, x1&, x2&, n As Double, n1 As Double, n2 As Double, sMax As Double
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     arC = Sheet2.Range("n1").CurrentRegion
  6.     Range("a1").CurrentRegion.Offset(2).ClearContents
  7.     For i = 3 To UBound(arC)
  8.         ReDim k(2)
  9.         For x = 2 To 4
  10.             k(x - 2) = arC(i, x)
  11.         Next
  12.         d(arC(i, 1)) = k
  13.     Next
  14.     arA = Sheet2.Range("a3:i" & Sheet2.Cells(Rows.Count, 1).End(3).Row + 1)
  15.     ReDim arB(1 To UBound(arA) + d.Count * 5, 1 To UBound(arA, 2))
  16.     For i = 1 To UBound(arA) - 1
  17.          If i = 1 Then x1 = arA(i, 1)
  18.          n = n + arA(i, 8)
  19.          y = y + 1
  20.          For x = 1 To UBound(arA, 2)
  21.              arB(y, x) = arA(i, x)
  22.          Next
  23.          If arA(i, 2) <> arA(i + 1, 2) Then
  24.              sMax = Application.Max(d(arA(i, 2)))
  25.              c = c + 1
  26.              x2 = arA(i, 1)
  27.              If sMax > 0 Then
  28.                  y = y + 1
  29.                  p = p + 1
  30.                  arB(y, 3) = "(" & p & ")" & arA(i, 2) & "小计(" & c & "):" & x1 & "-" & x2 & "项之和"
  31.                  arB(y, 8) = n
  32.                  k = d(arA(i, 2))
  33.                  For x = 0 To UBound(k)
  34.                      If Trim(k(x)) > 0 Then
  35.                          y = y + 1
  36.                          p = p + 1
  37.                          arB(y, 3) = "(" & p & ")" & Replace(arC(2, x + 2), "率", "") & "小计×" & k(x) * 100 & "%"
  38.                          arB(y, 8) = Round(n * k(x), 2)
  39.                          n1 = n1 + arB(y, 8)
  40.                      End If
  41.                  Next
  42.              End If
  43.              y = y + 1
  44.              arB(y, 3) = IIf(p = 0, arA(i, 2), "") & "合计(" & c & "):" & IIf(p > 0, "(1)-(" & p & ")之和", x1 & "-" & x2 & "项之和")
  45.              arB(y, 8) = n + n1
  46.              n2 = n2 + arB(y, 8)
  47.              n = 0
  48.              n1 = 0
  49.              p = 0
  50.              x1 = arA(i + 1, 1)
  51.          End If
  52.     Next
  53.     y = y + 2
  54.     arB(y, 3) = "总计:合计(1)-(" & c & ")之和"
  55.     arB(y, 8) = n2
  56.     Range("a3").Resize(y, UBound(arB, 2)) = arB
  57. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-22 20:21 | 显示全部楼层

代码收到,粘贴到附件中运行后,那个原来的合计项还在,还没有变化,望朋友再抽时间看看

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-23 08:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

朋友,如果黄色区域中数据为0,也就是没有费率,能不能加个判断直接算总计,计算直接计算,而不要里面的合计(5)合计(6)类的这些行,只要总计行。谢谢!
        E合计(5):28-32项之和                                        508006        
F        L5N-01-05        制动轮        只        220        1901        418220        行420341
F        L5N-01-06        制动轮        只        155        1902        294810        296867
        F合计(6):33-34项之和                                        713030        
                                                        
        总计:合计(1)-(6)之和                                        6504796   


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-23 21:27 | 显示全部楼层

朋友,抽个时间再看看这个帖子,当费率区域为0时,不统计合计,直接在底部总计,可以实现吗?

TA的精华主题

TA的得分主题

发表于 2018-7-24 08:26 | 显示全部楼层
ty1014 发表于 2018-7-23 21:27
朋友,抽个时间再看看这个帖子,当费率区域为0时,不统计合计,直接在底部总计,可以实现吗?

对于楼主这种无限制的要求,我很无语,别人也有工作。代码运行结果和楼主附件中的目标结果是一致的,楼主后面的要求也帮助更正啦,但这种无限制的更改要求,我很无助,也没有精力解答........

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-24 15:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
CC例例 发表于 2018-7-24 08:26
对于楼主这种无限制的要求,我很无语,别人也有工作。代码运行结果和楼主附件中的目标结果是一致的,楼主 ...

谢谢朋友的帮助31
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-10 21:22 , Processed in 0.025578 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表