Excel精英培训网

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

[分享] 【烟花原创】VBA零基础之第140篇 字典(十七)

[复制链接]
发表于 2014-3-31 00:08 | 显示全部楼层 |阅读模式
四、实战
9.数组嵌套
数据源:





如上三个工作表数据截图(部分),在工作簿中一共有三张工作簿,名称分别为表一,表二,表三。要求把上述三个表中把附一到附三中所有股东性质(
D列)为个人,增减情况为(E列)为新进的股东出现次数超过1次以上(三个表中累计超过一次以上)的统计出来。

思路:
由于有三个表(目前是这么多),每个表都有数据,这里我们定义数组来存储每个表的内容。当然,如果不用数组而改用变量来存储,那就得定义三个,并且代码的通用性也不够好,万一哪天BOSS发来的表有10来个,代码不是又得重新翻个天。
使用字典,可以统计数据中股东为个人性质并且是新进的股东的出现资料。
当然,上面还只是迈出了一第步,题目要求是要求累计次数而不是在某个表中出现的次数,另外由于数据是分布于不同的数组中。
所以字典中Item中需要保存的数据项就会有三个:
1数据在哪个数组元素中(索引号定位,数据来自于三个工作表,也就是有三个源数据数组)
2找到位于数组中的位置时,我们还需要知道该项数据在源数据数组中所在的行号。这里已经有点是三维数组的意思了。第一维是工作表,第二维是单元格所在的行,第三维是单元格所在的列,不知道各位看官是否晕了。
3是当前出现的次数。

Item构思完成,就是数据的遍历与添加了。
在读取数据时,先找出符合条件的数据。
找到后,先在字典中找股东是否有添加,如果没有,就添加该股东,并用array函数构建Item数组写入字典中,数据还暂时未写入到结果数组中。
如果字典中有添加该股东关键字,则说明该股东的出现资料已经大于1了。既然大于1,就可以把当前读取到的这一条记录写入到结果数组中。同时需要读取出该股东的Item,然后修改数组中的出现次数。由于第一次符合条件的数据并没有写入到结果数组中,所以这里我们需要补录该股东第一次时的数据。数据从何而来呢,关键就在Item。由于在第一次添加该股东关键字时,我们构建了一个数组(源数据的编号,符合条件的股东的数据所在的行号,0)。每次修改时,股东次数会相应增加,然后再写回到字典中。但是补录数据只需一次即可,所以接下来通过判断出现次数是否等于1(第1次构建时为0),当等于1时,我们就补录数据。

代码:


效果截图:

评分

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

查看全部评分

发表于 2014-3-31 00:22 | 显示全部楼层
本帖最后由 h486 于 2014-3-31 00:31 编辑

好东西啊!版主老大,你这些能否打包成pdf文件,方便像我这样的初学者学习。
如果可以请把sql 在vba中的运用也一起贴。
回复

使用道具 举报

 楼主| 发表于 2014-3-31 23:46 | 显示全部楼层
h486 发表于 2014-3-31 00:22
好东西啊!版主老大,你这些能否打包成pdf文件,方便像我这样的初学者学习。
如果可以请把sql 在vba中的运 ...

每天看就OK了,然后多练。


回复

使用道具 举报

发表于 2014-4-27 08:59 | 显示全部楼层
支持
回复

使用道具 举报

发表于 2014-6-18 15:08 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-24 16:25 | 显示全部楼层
谢谢,真是好东西,好好学习
回复

使用道具 举报

发表于 2018-10-15 19:45 | 显示全部楼层
你好~怎么看不到代码了呢
回复

使用道具 举报

发表于 2018-10-15 22:15 | 显示全部楼层
本帖最后由 gb168 于 2018-10-15 22:17 编辑

看不见图片,谢谢分享
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 07:23 , Processed in 0.419013 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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