分享

带您走进VBA数组3

 yuxinrong 2018-12-10
一、数组的分类

1.按维数分:一维,二维,多维

我是这样理解的,线是由点组成的,面是由线组成的,一维数组就像一条线,如我们工作表里的行,列,一行里的单元格,一列里的单元格就是数组里的元素,我通常把它叫做数组里的成员,二维数组就像一个面,如我们的工作表就是一个平面,工作表里的单元格也是二组数组里的元素.

2.按空间结构大小是否改变分:静态数组和动态数组

Option Explicit
Sub 静态数组1()'这个是表示8行1列的一维数组
    Dim arr1(1 To 8)
End Sub
Sub 静态数组2()'这个是表示8行2列的二数数组
    Dim arr1(1 To 8, 1 To 2)
End Sub
Sub 静态数组3()'这个是表示9行1列的一维数组
    Dim arr1(8)
End Sub
Sub 静态数组4()' 这个是表示9行3列的二维数组
    Dim arr1(8, 2)
End Sub

上面是静态的数组
===========================================================
Option Explicit
Sub 动态数组1()
     Dim x%
    Dim arr1()'定义动态数,为什么要定义动态数组呢,是因为我们刚开始时不知数组的空间结构,所以用dim arr1()
    x = 5
    ReDim arr1(1 To 5)'由于我们后来可以确定它的大小 ,所以用关键词Redim重新给数组arr1分配空间,5行1列的一维数组
    x = 10
    ReDim arr1(1 To 10)'
又重新给数组arr1分配空间,10行1列的一维数组,不过大家要注意,如果没有加Preserve ,重新分配空间之后,会删除前面的值,也就是说不会
''保留数组原有值,这一点很重要.同学们一定要记住.
End Sub
Sub 动态数组2()
    Dim x%
    Dim arr1()
    x = 5
  x = 10
  ReDim arr1(1 To 10, 1 To x)
End Sub
   
 ReDim arr1(1 To 5, 1 To x)'表示5行5列的二维数组,有的同学说,老师,可不可以把定义成这样,Dim arr1(1 to x,1 to 5),答案是否定的,不可以,也就是我们只能改变末维的大小,如三维的 Redim (1 to 1 ,1 to 1, 1 to x),也就是说我们变量只能放在三维上,不能放在一维Redim (1 to x,1 to 1, 1 to 1),
也不能放在二维上 如Redim (1 to x,1 to x, 1 to 1),
正确的定义:Redim (1 to 1 ,1 to 1, 1 to x),
错误的定义:Redim (1 to x,1 to 1, 1 to 1)
错误的定义:Redim (1 to x,1 to x, 1 to 1)
  
Sub 动态数组3()
    Dim x%
    Dim arr1()
    x = 1
    ReDim Preserve arr1(1 To 2, 1 To x)'表示2行1列的二维数组且保留原有值
    x = 2
    ReDim arr1(1 To 2, 1 To x)'表示2行2列的二维数组且保留原有值
End Sub

上面是动态数组
===================================================

下面是一段对白:
小白学生说:,我的老鼠老师,你说了那么一大堆,

汉……

哇……啦……啦……啦……啦……啦……

看得我云里雾里了,我都晕倒电脑旁边

老鼠老师说:我的亲:您可千万别晕啊,您晕了没有人关电脑了,我可不会帮你关机!

小白学生说:那老鼠老师您有没有什么绝招让我们不晕啊?

老鼠老师说:有啊,其实,我早就告诉您了,那一个神器,只是你上课不认真呢?

小白学生说:我的好老师,你就别买关子了,就告诉我们吧

老鼠老师说:再学习一遍一楼的帖

小白学生说:老鼠老师,我明白了,视图菜单,本地窗口,把光标点到你要测试代码里,F8逐步运行,查看本地窗口,哈哈,点一个那个节点+号,原来数组的空间结构一目了然了。明白了明白了。真开心啊

老鼠老师说:真聪明

总结一下,不开玩笑了,言归正传
我们现在举一个实例来学习
打开excel程序--->alt+f11---->插入菜单--->插入模块---> 把下面代码复制到模块里去
Sub 动态数组理解()
    Dim arr1(), x% '定义变量
    x = 1 '第一次给x赋值为1
    ReDim arr1(1 To 2, 1 To x) '给数组arr1分配空间,2行1列的二维数组
    arr1(1, 1) = "佛山小老鼠" '把"佛山小老鼠"赋值给arr1里第1行第1列位置
    arr1(2, 1) = "学生" '把"学生"赋值给arr1里第1行第2列位置
    x = 2 '第二次给x赋值为1
    ReDim Preserve arr1(1 To 2, 1 To x) '再给数组arr1重新分配空间,2行2列的二维数组
    '且保留原有值
     arr1(1, 2) = 99 '把99赋值给数组arr1里第1行第2列位置
    arr1(2, 2) = 88 '把88赋值给数组arr1里第1行第2列位置
End Sub

同学们注意,把光标点到上面这段代码里 F8逐上步运行,按照老师下面的截图步骤



 



 







 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多