ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] VBA数组通俗教程(初稿)

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-4 21:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:数组集合和字典
本帖最后由 怀英慕者 于 2011-10-4 21:52 编辑
ggsmart 发表于 2011-10-4 20:53
呵呵。。仔细从一楼看到44楼。
感觉很不错,看得出楼主是废了很多心的,值得赞扬。

山菊花老师的生动例子我也很赞成,三维的我到现在还没弄明白该应用到什么地方,该怎么用?希望你能够多举一些这样的例子让大家都学习学习!

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-4 21:55 | 显示全部楼层
EXCEL771220 发表于 2011-10-4 21:22
很好的作品!我认真的全部看完了,结合以前所看到的教程也搞不懂。、
期望EXCEL HOME多多出些这样针对初学 ...

谢谢你的支持!我也是个学习者,不断前行中,有了体会一定及时奉上!
另外,我希望得到一些反馈,就是我以这种写作风格写教程对于初学者来说是否能够快速的入门?你们能接受这样的学习思路吗?真正看懂和接受我讲解的东西了吗?

点评

看得懂,呵呵. 举个例,发前文件夹下有多个结构相同的工作薄,每个工作薄里有相同的多张工作表,现要将这些工作薄里的所有工作表汇总到一个工作薄的多张工作表里,可以用三维数组来处理的吧。  发表于 2011-10-4 23:07

TA的精华主题

TA的得分主题

发表于 2011-10-4 22:16 | 显示全部楼层
说到维数,我觉得中国人的思维和西方人本质上就是有差异的。

比如寄信地址。中国人是:
中国 广东省 广州市 中山路 108号 A座 802单元

是从大向小,直至最终目标这样的收敛方式。

而西方习惯是倒过来,

802 room, Build-A, Guangzhou, Guangdong Province, China


这样是发散的。

………………
那么对于数组元素,或单元格区域来说,

首先是Cells级别的Range Address,即A1单元格,这个地址描述,就相当于一个二维表了。
接下来是Worksheets级别,可以算是第三维了。
如 Dim arr(1 to 65536,1 to 256,1 to 3) 相当于一个工作簿文件,里面有三个工作表,每个工作表还有65536行256列的单元格。

接下来,继续发散、扩展

我在某个文件夹里,
类似的3个工作表的工作簿有5个,分别是:Book1,Book2,Book3,Book4,Book5

那么用多维数组描述就成为:
Dim arr(1 to 65536,1 to 256,1 to 3,1 to 5)

接下来,同样的文件夹有2个,分别是:workrecord1,workrecord2
放在d盘
那么,相应的多维数组描述就成为:
Dim arr(1 to 65536,1 to 256,1 to 3,1 to 5,1 to 2)

接下来,同样的数据硬盘有4个,分别是:D:\,E:\F:\G:\
放在你的电脑里
那么,相应的多维数组描述就成为:
Dim arr(1 to 65536,1 to 256,1 to 3,1 to 5,1 to 2,1 to 4)

接下来,同样的电脑有5台在使用,分别是:PC-1,PC-2,PC-3,PC-4,PC-5
放在你的班组里
那么,相应的多维数组描述就成为:
Dim arr(1 to 65536,1 to 256,1 to 3,1 to 5,1 to 2,1 to 4,1 to 5)


接下来,同样的班组有3个,分别是:A班、B班、C班
在你的部门里
那么,相应的多维数组描述就成为:
Dim arr(1 to 65536,1 to 256,1 to 3,1 to 5,1 to 2,1 to 4,1 to 5,1 to 3)

同样的部门有2个,在你的公司里
那么,相应的多维数组描述就成为:
Dim arr(1 to 65536,1 to 256,1 to 3,1 to 5,1 to 2,1 to 4,1 to 5,1 to 3,1 to 2)

同样的公司有3个,在你的集团里
那么,相应的多维数组描述就成为:
Dim arr(1 to 65536,1 to 256,1 to 3,1 to 5,1 to 2,1 to 4,1 to 5,1 to 3,1 to 2,1 to 3)

…………

就这样,按照西方世界的习惯,你可以不断地向上扩展你的维数。

最最上面,还有 国家→地球→太阳系→银河系→宇宙,等等



…………

这里面有一个重要概念,事实上在当前使用的维数状态下,总是存在一个更高级的维数在背后支持着的。

只要存在类似的集合,并且需要加入管理,就可以升高一个维数了。


…………
那么最后,对于维数的概念,来说,就是:

同一维数下的内涵,是平等的,相似的。
而更高级一维存在的唯一理由和目的,

就是把这些相似的东西统一起来管理。


也可以认为,是一种等级、地位概念。


也是人类社会不平等的真实写照。


只有工作表中的每个单元格,可以是基本平等的。

而越往上就越高级了。

呵呵。




点评

同意  发表于 2011-10-4 23:08

评分

6

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-10-4 22:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
顶你一个 好东西需要分享

TA的精华主题

TA的得分主题

发表于 2011-10-4 22:34 | 显示全部楼层
怀英慕者 发表于 2011-10-4 21:48
山菊花老师的生动例子我也很赞成,三维的我到现在还没弄明白该应用到什么地方,该怎么用?希望你能够多举 ...

三维的实际应用例子确实不多。

不过可以给你现编一个:

设有工作表Book1,其中有三个sheet分别是sheet1,sheet2,sheet3

我如果要把每个工作表的A1:B10数据储存到VBA内数组中,


那么,如果使用一个二维表的话,
可以是:dim arr(1 to 10 * 3 , 1 to 2+1)
总共 30 * 3 = 90个元素


即,每个单元格,除了行、列以外,还要在最后添加一个sheet位置信息
如:
行标列标:   列1 列2   列3
      1          a1  b1  sheet1
      2          a2  b2  sheet1
      3          a3  b3  sheet1
    ……               ……
     10        a10  b10  sheet1
     11          a1  b1  sheet2
     12          a2  b2  sheet2
     13          a3  b3  sheet2
    ……               ……
     20        a10  b10  sheet2
     21          a1  b1  sheet3
     22          a2  b2  sheet3
     23          a3  b3  sheet3
    ……               ……
     30        a10  b10  sheet3


这样的需要 90个元素

…………

但是,如果用三维来表示的话,就简单多了:
dim brr(1 to 10, 1 to 2 ,1 to 3)
元素总量就只有 10 * 2 * 3 = 60个

而刚才说了,如果用二维表,就需要对每一个元素添加sheet信息,
这样显然事实上存在过多的冗余信息了。


这个,就是多维数组实际存在的需要。


除了减少容量外,
检索定位更加直观,更加容易操作,也是重要的优点。


呵呵。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-4 22:38 | 显示全部楼层
香川群子 发表于 2011-10-4 22:16
说到维数,我觉得中国人的思维和西方人本质上就是有差异的。

比如寄信地址。中国人是:

我们不是在单纯的研究维数的概念,我们只是在想如何更好的使用excel解决问题。据我所知,二维数组的执行效率就不如一维数组的高,那么三维以上的更可想而知了。问题是,我们的工作表里真正需要经常使用到三维或三维以上的数组吗?如果不需要,那么我们何必去讨论他呢?如果要讨论要研究,那vba语言比起其他语言本身就是种很低效的语言,我们还学习他干什么?直接学其他语言岂不更好!所以,我在写教程时尽可能地避免讨论维的概念,尽可能地联系到excel前台操作,因为,我们在使用excel,而不是其他。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-4 22:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
香川群子 发表于 2011-10-4 22:34
三维的实际应用例子确实不多。

不过可以给你现编一个:

群子老师,还是给代码更直观一些!
就我目前的理解水平,还不能想象出来用代码怎么实现您的例子。假定三维可以实现工作表的描述,那么为什么不学,这是好东西啊,也没有什么太多的理解难度啊!问题在于我在现实中还没见到三维的应用实例,故此想象不到怎么编写。
给个简单的例子代码吧!

TA的精华主题

TA的得分主题

发表于 2011-10-4 22:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-10-4 22:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢楼主的辛苦

TA的精华主题

TA的得分主题

发表于 2011-10-4 23:03 | 显示全部楼层
附件为三维数组例子,显然二维的赋值代码会复杂一点。
  1. Sub test()
  2.     '首先是二维数组
  3.     Dim arr(1 To 10 * 3, 1 To 2 + 1)
  4.     For i = 1 To 30
  5.         k = (i - 1) \ 10 + 1 '计算sheet参数
  6.         q = (i - 1) Mod 10 + 1 '计算各sheet行数对应二维数组中的行数
  7.         arr(i, 3) = Worksheets(k).Name '每一行都要加入sheet信息
  8.         For j = 1 To 2
  9.             arr(i, j) = Worksheets(k).Cells(q, j)
  10.         Next
  11.     Next
  12.    
  13.     '下面是三维数组
  14.     Dim brr(1 To 10, 1 To 2, 1 To 3)
  15.     For k = 1 To 3
  16.         For i = 1 To 10
  17.             For j = 1 To 2
  18.                 brr(i, j, k) = Worksheets(k).Cells(i, j)
  19.             Next
  20.         Next
  21.     Next
  22.    
  23. MsgBox "OK"
  24. End Sub
复制代码
比较一下,就知道优劣了。


只不过,我们这里还很少有人会用到同时操作多个工作表中相同地址的内容等。

呵呵

三维数组测试.rar

7.67 KB, 下载次数: 102

评分

1

查看全部评分

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

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-12-24 04:30 , Processed in 0.046686 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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