教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

excel - VBA基础入门 - 图文(10)

来源:网络收集 时间:2026-05-25
导读: 任为了便于管理,为班上的学生都编了学号,所以上课时点名我习惯性只点学生学号,我说,5号同学请上黑板演示一下你的解题过程,10号同学下课后请替老师把大家的作业收起来……下课后,在办公室,和大家聊天,我更不

任为了便于管理,为班上的学生都编了学号,所以上课时点名我习惯性只点学生学号,我说,5号同学请上黑板演示一下你的解题过程,10号同学下课后请替老师把大家的作业收起来……下课后,在办公室,和大家聊天,我更不叫学生名字而直接统称为?七(1)班?。 待我学习了VBA的数组后,我忽然明白了,这种简化的称呼方式原来就是?数组?。 这里,我们是把一群学生聚在了一起组成了?七(1)班?(数组名)这个集合,班级里的学生我们通过?学号?(索引号)对其进行区分。上课时,我问:?5号同学是谁??,一个同学站起来答:?我叫moon2778?,于是,我知道了,?七(1)班?这个数组里的第5个元素就是?moon2778?。用数组来表示就是?七(1)班(5)?,也就是数组名加索引号。好了,当别人果问你:?‘七(1)班(5)’的同学是谁??时,你一定要知道,是?moon2778?。 那么,什么是数组,你知道了吧?它有什么特点,我们可以试着简单小结一下: 1、数组共享一个名字,即数组名; 2、数组是变量的集合,有多个元素;

3、数组中的元素按顺序保存在数组中,元素通过索引数字加以区分; 4、数组是变量。

二、定义数组

声名数组同声明其他变量的方式一样,唯一不同的是数组有大小,包含多个单个变量。 初一学生报名入学后开始分班级,领导说,七(1)班分50个学生(确定了班级学生的个数最多只能有50个学生,再多一个都不行,因为没有座位了。),知道有50个学生后,老师拿到学生花名册就开始给学生编学号,建学籍。1号是谁?2号是谁?……50号是谁? 这就是一个定义数组,并给数组赋值的过程,用语句来表示,可以这样: Dim 七(1)班(1 To 50) 七(1)班(1) = \张三\ 七(1)班(2) = \李四\ 七(1)班(3) = \王王\ .....

七(1)班(50) = \赵六\

这里,我们定义了一个50个元素的一维数组,并分别给数组的元素赋值。当然,这里用的只是一个模拟的语句。如果我们需要定义一个数组arr,存放1到100的整数集合,则代码为: 代码:

Sub ggsmart()

Dim arr(1 To 100) As Integer '声明数组名称及数据类型 For i = 1 To 100 '循环,为数组的元素赋值 arr(i) = i Next End Sub

其实?Dim arr(1 To 100) As Integer?我们也可以写成?Dim arr(99) As Integer?,这样,定义的数组同样是100个元素的一维数组,因为如果不指定起始索引号的话,VBA默认从0开始。

当然,你也是可以通过OPTION BASE 来修改数组默认的起始序号,在模块的第一句写上?OPTION BASE 1?这样,默认的数组起始序号就是1了。

学习累了,恰好第二节课刚下,课间操时间,顺便可以到操场练练。可是,有些同学不认真啊,这不,老师在广播里叫上了:?七年级,(1)班的第五个同学请认真一点,七年级,(2)班的第三个同学注意队形……?

天了,我惊奇地发现,原来我们生活中有这么多?数组?,可是,你知道上面的这两个同

学共享了一个什么名字吗? 是的,?七年级?就是它们共有的名字。

新生分班时,校长就说了,550名新生,每班50人,分成11个班,到各个班级里,老师都给学生分了学号(1到50号),11个班级就有11个1号,也有11个50号。晕,一个班的学生名字我都记不住,如果11个班的学生全站在一起,我该怎么称呼?

我高兴了,还好,我会数组。找到?moon2278?同学,我会说?七年级,1班,5号同学?,哈,难不了我。如果?宝贝有酒窝?同学是初一(9)班的25号,没关系,我也会说?七年级,9班,25号同学?。

哇,好简单,前面加个班级的序号区分就行了。 这里,?七年级?实际上是一个由11个一维数组(11个班)组成的二维数组,它的元素的个数是11*50(11个班,每个班级50名学生)个。习惯性,大家会说它是一个11*50的二维数组。

如果要写成代码,那就是: Dim 七年级(1 To 11, 1 To 50) 七年级(1, 1) = \张三\ 七年级(1, 2) = \李四\ '......

七年级(2, 1) = \钱林\ 七年级(2, 50) = \林平\ '......

七年级(11, 50) = \周六\

我们说上面的数组是一个11*50的二维数组,放到表格里就相当于是一个11行50列的数组。

如果我们想定义一个二维数组,第一列存放1到100的奇数,第二列存放1到100的偶数,代码为: 代码:

Sub ggsmart()

Dim i As Integer, j As Integer

Dim arr(1 To 50, 1 To 2) As Integer '定义一个50*2的二维数组(50行,2列) j = 1 '数组1 to 50的索引号 For i = 1 To 100 Step 2 arr(j, 1) = i '奇数赋值

arr(j, 2) = i + 1 '偶数赋值 j = j + 1 '索引号加1 Next

[a1:b65536].Clear '清除原有数据

[a1].Resize(50, 2) = arr '将数组赋值给A1单元格向下50行,向右2列的区域 End Sub

1到100的奇偶数.rar (6.63 KB) 1到100的奇偶数.rar (6.63 KB)

把代码复制到模块里,按F5可以看到程序运行的效果。

上面,我们讲的是一维数组和二维数组,你也可以按同样的思路来理解三维、四维数组,甚至五维、六维……或者更多。

无非就是将称呼moon2278同学的方式改为?XX中学、七年级、1班、5号同学?或?XX市、XX中学、七年级、1班、5号同学?而已,如果你喜欢,你还可以将这个称呼扩展,随你

了,这里不再举例。

三、动态数组

声明一个数组,必须指定数组的大小,即它是几维数组,有多少个元素。

但有些时候,我们在定义数组的时候,并不能确定数组的大小,这时,我们在首次定义数组的时候括号内为空(当然先指定一个大小也是可以的,但纯属是多余),在程序过程中用Redim语句去重新指定数组的大小,这就是动态数组。

比如一个工作表的A列存储了学生姓名,现在我们需要把把有姓?张?的学生存储在数组arr中,预先我们并不知道A列姓张的学生有三十个还是五十个,所以,我们在定义时代码可以这样: 代码:

Sub ggsmart()

Dim i%, xrow%, j%, xcount% Dim arr() As String

xrow = [a65536].End(3).Row '最后一个非空单元格行号 j = 1 '数组索引号

xcount= Application.WorksheetFunction.CountIf([a1:a65536], \张*\统计有多少姓张的学生

ReDim arr(1 To xcount) '重新定义数组大小,元素共有xcount个 For i = 1 To xrow

If Left(Cells(i, 1).Value, 1) = \张\ arr(j) = Cells(i, 1).Value '给数组元素赋值 j = j + 1 '索引号加1 End If Next i

[b1:b65536].Clear '清除原有数据

[b1].Resize(xcount,1)=Application.WorksheetFunction.Transpose(arr) '将数组输入单元格区域 End Sub

姓?张?的学生.rar (7.16 KB) 姓?张?的学生.rar (7.16 KB) 四、其他创建数组的几种方式

其实在上面,我们已经接触了如何创建数组了。无非就是像给学生排座位一样,你坐第一排,我坐第二排,他坐第三排,然后你们大家统称为第一组。 好简单,这里,我再介绍几种上面没讲到,但常见的方法: 1、使用Array创建数组 看以下代码: 代码:

Sub ggsmart() Dim arr()

arr = Ar …… 此处隐藏:4028字,全部文档内容请下载后查看。喜欢就下载吧 ……

excel - VBA基础入门 - 图文(10).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/447493.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)