ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 用字典嵌套统计

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-2 22:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
因表格是二维的,用行和列字段名完全可以用一个字典代替(以前没有发现)
当然,就这个例子也可以通过数组循环不用一个字典。打算写一个传销的金字塔人员结构,这样字典嵌套可能就会体现出它的优越性了,考虑成熟了贴上来再与大家讨论。

TA的精华主题

TA的得分主题

发表于 2013-5-2 22:42 | 显示全部楼层
本帖最后由 longming3 于 2013-5-2 22:45 编辑
dsmch 发表于 2013-5-2 22:31
因表格是二维的,用行和列字段名完全可以用一个字典代替(以前没有发现)
当然,就这个例子也可以通过数组 ...

Sub Macro3()
    m1 = 2  '最小的行数
    m2 = 10 '最大的行数
    n1 = 1  '最小的列数
    n2 = 6  '最大的列数
    s = "Sheet1!R" & m1 & "C" & n1 & ":R" & m2 & "C" & n2
    Range("k1").Resize(1, n2) = Range("a1").Resize(1, n2).Value
    Range("k2").Consolidate s, xlSum, 0, 1
End Sub

这算不算一种方法

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-2 22:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
longming3 发表于 2013-5-2 22:42
Sub Macro3()
    m1 = 2  '最小的行数
    m2 = 10 '最大的行数

目标格式中店名、月份和原始数据的格式不可能一致,感觉用一个字典处理最方便灵活。

TA的精华主题

TA的得分主题

发表于 2013-5-2 23:07 | 显示全部楼层
凑个热闹,献丑了!
  1. Sub Macro2()
  2. Dim arr, brr, crr, d As Object, i&, j&
  3. Set d = CreateObject("scripting.dictionary")
  4. arr = Range("a1").CurrentRegion '原始数据
  5. brr = Range("a15").CurrentRegion '目标数据
  6. ReDim crr(2 To UBound(brr), 2 To UBound(brr, 2))
  7. For i = 2 To UBound(brr)
  8.    d(brr(i, 1)) = i
  9. Next
  10. For i = 2 To UBound(arr)
  11.    For j = 2 To UBound(arr, 2)
  12.        crr(d(arr(i, 1)), j) = crr(d(arr(i, 1)), j) + arr(i, j)
  13.    Next
  14. Next
  15. Range("b16").Resize(UBound(crr) - 1, UBound(crr, 2) - 1) = crr
  16. End Sub
复制代码

点评

数组和字典嵌套,这个方法不错,比赵刚版主的方法更容易理解,赞一个!  发表于 2013-5-3 19:22

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-5-3 15:36 | 显示全部楼层
数据多的话速度快吗?

TA的精华主题

TA的得分主题

发表于 2013-5-3 15:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
就这个附件而言,用sumif公式更快而且还省事。

TA的精华主题

TA的得分主题

发表于 2013-5-4 07:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-5-4 08:36 | 显示全部楼层
用多个字典也挺简单的
Sub text1()
Dim d As Object, ar, x%, y%
Set d = CreateObject("scripting.dictionary")
ar = [a1].CurrentRegion
For x = 2 To UBound(ar, 2)
    For y = 2 To UBound(ar)
        d(ar(y, 1)) = d(ar(y, 1)) + ar(y, x)
    Next
    If x = 2 Then Cells(16, 1).Resize(d.Count, 1) = Application.Transpose(d.keys)
    Cells(16, x).Resize(d.Count, 1) = Application.Transpose(d.items)
    d.RemoveAll
Next
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-5-4 11:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
显然楼主对字典的用法虽然已经入门,但理解还不够深刻。

提醒你【字典的特点】
一、字典关键词 key 的特点: 唯一、不重复。和itme项目有直接关联性。
因此:
1. key是不重复的。因此可以用来:
  a. 排除重复项   应用实例略
  b. 合并同类项   应用实例略
  
2. key对item项的直接关联性,可以用来:
  a. 检索并返回key对应的item项目内容
  b. 快速定位
     如果把item内容设置为:行、或列位置,或单元格地址等,
     那么相当于通过key就可以用来快速定位,直接确定对应位置,
     否则需要对数组进行遍历循环以及比对,因此这个作用对字典用法来说非常重要。

3. 字典中key是否存在的检查,以及不同处理
  
  ………………这个略了,一下子说不完。
  

二、Item项目的基本用法。
1. 统计: 即合并同类项过程中,对相同key的某个属性进行合并、统计。
  a. 计数+1
   b. 数量、金额加总、汇总(包括扣减)
2. 合并: 不可计算部分的信息合并
  a. 字符信息的合并 (处理完成后可以split拆分……)
   b. 查找、替换
  c. 数组形式的处理 (=Array(,,,)……)
3. 字典嵌套
  a. 字典嵌套字典
  b. 字典嵌套数组
4. 特殊处理
  如Item项目为Range对象时,对于Range对象的各种处理方法


…………

但是,与此同时,字典的key值、Item内容的处理方法不同造成的算法上的差异,
对于新手和老手之间的差异,也几乎是天地之间的差异……

一个好的算法,即有效合理地字典对象使用,差别真的很大。

这方面,似乎只有靠经验的积累了……没有捷径。


楼主大概就是缺经验。呵呵。


   

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-5-4 12:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2013-5-4 11:56
显然楼主对字典的用法虽然已经入门,但理解还不够深刻。

提醒你【字典的特点】

字典接触也有好几年了,字典嵌套确实没有接触过,
论坛上的有关介绍也是支离破碎,群子不妨就此贴拓展一下有关知识。

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

本版积分规则

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

GMT+8, 2024-11-15 14:24 , Processed in 0.041970 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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