Excel精英培训网

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

VBA数组入门教程第3例:把单元格数据搬入内存

  [复制链接]
发表于 2010-8-5 12:04 | 显示全部楼层 |阅读模式
<p></p><p>&nbsp;VBA数组储存于内存中,单元格的数据,储存于工作表的单元格区域里。</p><p>&nbsp;&nbsp;&nbsp; 从单元格中取出数据放在内存。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;单元格是行列结构的数据表,把它搬到内存中也应该是二维的数组。怎么搬呢?</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了更好的搬运,内存先批了一块土地。内存说了,你有多少个单元格我不问,反正你有多少数据我提供多大的地方。</p><p><font color="#ee0000">&nbsp;&nbsp;一、声明:</font></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim arr as Variant&nbsp; '<font color="#0707c6">声明一个变量,这个变量应该是一个可以转化成数组的Variant类型(可以省略),不能声明其他数据类型</font></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如: Dim arr as string&nbsp;&nbsp; 这种声明就是<font color="#f70909">错误</font>的,存放单元格的数据类型必须是 Variant(也可以省略)&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim arr(1 to 10, 1&nbsp; to&nbsp;&nbsp;2&nbsp;) , 这种声明也是<font color="#dd0000">错误</font>的,固定大小的VBA数组是不能一次性装入单元格数据</p><p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 或:dim arr()&nbsp;&nbsp;&nbsp; <font color="#0808e7">这种声明方式是声明一个动态数组,也可以装入单元格区域,构成一个VBA数组</font>。</p><p><font color="#dd0000">&nbsp;&nbsp;二、装入</font></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr =range("a9:c100")&nbsp;&nbsp; '装入很简单,变量 = 单元格区域</p><p><font color="#e70808">&nbsp; 三、读出</font></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 装入数组后的单元格数值,可以按 <font color="#0707b5">数组名称</font>(<font color="#cc0000">行数</font>,<font color="#046316">列数</font>) 直接读取该位置的值,如下面的代码。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Msgbox&nbsp; arr(3,2)&nbsp;&nbsp; '就可以取出搬过去的而构成的数组第3行第2列的内容</p><p><font color="#cc0000">四、示例</font></p><p>&nbsp;Sub s3()</p><p>&nbsp;&nbsp;&nbsp; Dim arr() '<font color="#0808d6">声明一个动态数组(动态指不固定大小)<br/></font>&nbsp;&nbsp; Dim arr1&nbsp; '<font color="#0c0caf">声明一个Variant类型的变量</font><br/>&nbsp;&nbsp; arr = Range("a1:c7")&nbsp;&nbsp; '<font color="#0808d6">把单元格区域A1:C7的值装入数组arr</font></p><p>&nbsp;&nbsp; arr1 = Range("a1:c7")&nbsp;&nbsp; '<font color="#0707b5">把单元格区域A1:C7的值装入数组arr1</font><br/>&nbsp;<br/>&nbsp;&nbsp; MsgBox arr(1, 1)&nbsp;&nbsp; '<font color="#0707c6">读取arr数组中第1行第1列的数值</font><br/>&nbsp;<br/>&nbsp;&nbsp; MsgBox arr1(2, 3)&nbsp; '<font color="#0707b5">读取arr1数组的第2行第3列的数值</font><br/>&nbsp;<br/>End Sub</p><p><font color="#ee0000">下期预告</font>:搬入内存的目的是为了更快速的计算,计算结束后,怎么搬回到单元格中呢?且听下回分解。</p>
[此贴子已经被作者于2010-8-5 12:07:31编辑过]
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-8-5 12:05 | 显示全部楼层
回复

使用道具 举报

发表于 2010-8-5 12:12 | 显示全部楼层
回复

使用道具 举报

发表于 2010-8-5 12:19 | 显示全部楼层

饭后的点心[em01][em02]
回复

使用道具 举报

发表于 2010-8-5 12:26 | 显示全部楼层

<p>多看,多认识,加深印象,谢了!!</p><p></p>
回复

使用道具 举报

发表于 2010-8-5 12:47 | 显示全部楼层

<p>是不是还有前两讲?</p>
回复

使用道具 举报

发表于 2010-8-5 13:15 | 显示全部楼层

看完这三课感觉不是很难,可是却摸不到头脑。
回复

使用道具 举报

发表于 2010-8-5 13:20 | 显示全部楼层

请问兰版,<div>dim arr()&#160;<span class="Apple-style-span" style="font-family: tahoma, 宋体, fantasy; font-size: 12px; ">as Variant</span></div><div>dim arr&#160;<span class="Apple-style-span" style="font-family: tahoma, 宋体, fantasy; font-size: 12px; ">as Variant</span></div><div><br/></div><div>这两种声明方式,是不是在使用的时候,才确定是否是一维数组、二维数组或者是三维数组呢?</div><div><br/></div>
回复

使用道具 举报

 楼主| 发表于 2010-8-5 13:22 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>wbzxz</i>在2010-8-5 13:20:00的发言:</b><br/>请问兰版,<div>dim arr()&nbsp;<span class="Apple-style-span" style="FONT-SIZE: 12px; FONT-FAMILY: tahoma, 宋体, fantasy;">as Variant</span></div><div>dim arr&nbsp;<span class="Apple-style-span" style="FONT-SIZE: 12px; FONT-FAMILY: tahoma, 宋体, fantasy;">as Variant</span></div><div><br/></div><div>这两种声明方式,是不是在使用的时候,才确定是否是一维数组、二维数组或者是三维数组呢?</div><div><br/></div></div><p>是的,取决装入它的数组的维数</p><p>arr() 可以用redim 再次定义,这个会在以后的示例中讲解</p>
回复

使用道具 举报

发表于 2010-8-5 13:29 | 显示全部楼层

兰版,单元格给数组赋值真是特殊。<div><div><br/></div><div>如果不用单元格给数组赋值的时候,必须指定数组的维数和大小,对吗?</div><div><br/></div><div><br/></div><div><br/></div><div><br/><div><br/></div></div></div>
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 21:43 , Processed in 0.274883 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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