Excel精英培训网

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

[已解决]查找并动态增减行及汇总

[复制链接]
发表于 2017-7-10 11:32 | 显示全部楼层 |阅读模式
本帖最后由 lidayu 于 2017-7-25 09:44 编辑

请老师看看如何实现,有点难度的随数据增减行数并汇总。
查找数据动态增减行数并汇总0710.rar (161.83 KB, 下载次数: 34)
 楼主| 发表于 2017-7-10 15:40 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2017-7-10 21:58 | 显示全部楼层
回复

使用道具 举报

发表于 2017-7-11 09:31 | 显示全部楼层
数据整理是不难的,关键就是格式了,又有合并单元格,最后还需要各种求和,太麻烦了。

评分

参与人数 1 +3 收起 理由
lidayu + 3 感谢您的帮助

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-7-11 09:43 | 显示全部楼层
大灰狼1976 发表于 2017-7-11 09:31
数据整理是不难的,关键就是格式了,又有合并单元格,最后还需要各种求和,太麻烦了。

大灰狼1976您好,很荣幸又得到您的指点。是的这要求确实有点麻烦,呵呵。要是您乐意就帮我整理下数据,至于格式、合并单元格、字体加粗的我慢慢的摸索,碰不会到时再请教您好吗。
回复

使用道具 举报

发表于 2017-7-11 09:53 | 显示全部楼层
好吧,我做下核心部分,不过建议把中文数字一、二...五换成阿拉伯数字方便处理。

评分

参与人数 1 +3 收起 理由
lidayu + 3 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-7-11 10:05 | 显示全部楼层
大灰狼1976 发表于 2017-7-11 09:53
好吧,我做下核心部分,不过建议把中文数字一、二...五换成阿拉伯数字方便处理。

大灰狼1976您好,至于一、二、三...可能不大好换,您最好能帮我写成混合都能用的那种,因数据源表有时个的号型是1、2、3....,或1号、2号、3号....,有时是一、二、三...,或一号、二号、三号...这种数据都是客户提供的。
回复

使用道具 举报

发表于 2017-7-11 10:40 | 显示全部楼层
简化版请测试。
说明:由于我操作系统版本关系,代码内不能出现汉字,所以用了辅助单元格区域,
你可以在代码内将引用的单元格直接换成汉字,然后删除辅助单元格区域,在P列。

test.zip

135.19 KB, 下载次数: 27

评分

参与人数 1 +3 收起 理由
lidayu + 3 很给力

查看全部评分

回复

使用道具 举报

发表于 2017-7-11 10:45 | 显示全部楼层
有一处错误,代码请替换
  1. Sub aaa()
  2. Dim arr, brr(1 To 1000, 1 To 12), i&, d As Object, d1 As Object, s$, s1$, r&
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d1 = CreateObject("scripting.dictionary")
  5. d([p1].Value) = 2
  6. d([p2].Value) = 7
  7. d([p3].Value) = 12
  8. d([p4].Value) = 0
  9. d([p5].Value) = 1
  10. d([p6].Value) = 2
  11. d([p7].Value) = 3
  12. d([p8].Value) = 4
  13. d("") = 0
  14. s = Sheets(2).[a2]: s1 = Sheets(2).[a3]
  15. arr = Sheets(1).[a1].CurrentRegion
  16. For i = 2 To UBound(arr)
  17.   If arr(i, 2) = s And arr(i, 3) = s1 Then
  18.     If Not d1.exists(arr(i, 6)) Then
  19.       r = r + 1
  20.       d1(arr(i, 6)) = r
  21.       brr(r, 1) = arr(i, 6)
  22.     End If
  23.     brr(d1(arr(i, 6)), d(arr(i, 10)) + d(arr(i, 8))) = brr(d1(arr(i, 6)), d(arr(i, 10)) + d(arr(i, 8))) + arr(i, 9)
  24.   End If
  25. Next i
  26. Sheets(2).[a4:l1000].ClearContents
  27. Sheets(2).[a4].Resize(r, 12) = brr
  28. End Sub
复制代码

评分

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

查看全部评分

回复

使用道具 举报

发表于 2017-7-11 10:50 | 显示全部楼层
lidayu 发表于 2017-7-11 10:05
大灰狼1976您好,至于一、二、三...可能不大好换,您最好能帮我写成混合都能用的那种,因数据源表有时个 ...

我现在是直接使用了中文数字一二三...,如果有其他规则,你可以自己在d()里面添加就行了,只要确保一=0,二=1......这样的规则就行了。

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 23:46 , Processed in 0.923053 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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