Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3555|回复: 7

[已解决](2017年的第一次求助)字典实现分类汇总至新表

[复制链接]
发表于 2017-1-22 15:50 | 显示全部楼层 |阅读模式
1.JPG 2.JPG (求助)字典分类汇总至新表.rar (39.79 KB, 下载次数: 29)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2017-1-23 11:16 | 显示全部楼层
双条件字典查找分类汇总,并循环出有填充色的分项名称和构件名称,把汇总结果放在其中
大神呢?好期待啊!
回复

使用道具 举报

发表于 2017-1-23 18:00 | 显示全部楼层
If Not dic.Exists(条件1 & 条件2 ) Then  
回复

使用道具 举报

发表于 2017-2-2 19:21 | 显示全部楼层
为什么工程量列中有的公式中除1000,有的没有除1000的?
回复

使用道具 举报

发表于 2017-2-2 20:21 | 显示全部楼层    本楼为最佳答案   
请见代码。
2017-2-2型号1.png
2017-2-2型号2.png

评分

参与人数 1 +1 收起 理由
hefeilac + 1 赞一个

查看全部评分

回复

使用道具 举报

发表于 2017-12-7 12:54 | 显示全部楼层
Sub 汇总()
Dim arr, j, l, brr(1 To 1000, 1 To 7)
ar = Array(2, 4, 21, 22, 23, 24)
With Sheets("结构明细表")
r = .[f65536].End(3).Row
arr = .Range("a1:ac" & r)
For i = 3 To UBound(arr)
     For ii = 0 To UBound(ar)
         j = ar(ii)
         If .Cells(i, j) <> "" Then
            n = n + 1
            Select Case j
                   Case 2
                   l = 1
                   Case 4
                   l = 2
                   Case Else
                   l = 3
            End Select
            If .Cells(i, j).Interior.ColorIndex <> -4142 Then '-4142表示无色
               l2 = 14 'N列(总重)
            Else
               l2 = j + 4
            End If
            brr(n, l) = arr(i, j)
            brr(n, 5) = Round(arr(i, l2) / 1000, 2)
            brr(n, 6) = arr(i, 29)
            brr(n, 7) = arr(i, 16)
         End If
     Next ii
Next i
End With
Sheets("构件材料分析表").[a23].Resize(n, 7) = brr
End Sub
回复

使用道具 举报

发表于 2017-12-7 12:55 | 显示全部楼层
Sub 汇总2()
Dim arr, j, l, brr(1 To 1000, 1 To 7)
ar = Array(2, 4, 21, 22, 23, 24)
Application.ScreenUpdating = False
Set d = CreateObject("scripting.dictionary")
t = Timer
With Sheets("结构明细表")
r = .[f65536].End(3).Row
arr = .Range("a1:ac" & r)
For i = 3 To UBound(arr)
     For ii = 0 To UBound(ar)
         j = ar(ii)
         If .Cells(i, j) <> "" Then
            l = IIf(j = 2, 1, IIf(j = 4, 2, 3))
            If .Cells(i, j).Interior.ColorIndex <> -4142 Then '-4142表示无色
               l2 = 14 'N列(总重)
               d.RemoveAll
            Else
               l2 = j + 4
            End If
            If Not d.exists(arr(i, j)) Then
               n = n + 1
               d(arr(i, j)) = n
               brr(n, l) = arr(i, j)
               brr(n, 5) = Round(arr(i, l2) / 1000, 2)
               brr(n, 6) = arr(i, 29)
               brr(n, 7) = arr(i, 16)
            Else
               m = d(arr(i, j))
               brr(m, 5) = brr(m, 5) + Round(arr(i, l2) / 1000, 2)
            End If
         End If
     Next ii
Next i
End With
With Sheets("构件材料分析表")
     .Rows("23:100").ClearContents
     .[a23].Resize(n, 7) = brr
End With
MsgBox Format(Timer - t, "0.00秒")
Application.ScreenUpdating = True
End Sub
回复

使用道具 举报

发表于 2017-12-7 12:57 | 显示全部楼层
提供合并与不合并两种思路,仅供参考
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-8 07:27 , Processed in 0.263652 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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