分享

VBA中的:常量、变量和数组

 亭上凉风 2019-12-20

变量可以更改存储在其中的数据,而常量不可以,这就是常量和变量最主要的区别。常量是用来存储一些固定不变的数据。

  • 一、常量

  • 1、声明常量时,应同时给常量赋值,语法如下:

const 常量名称 as 数据类型=常量数据

  • 2、常量的作用域

在过程内使用const语句声明的常量为本地常量,只可以在声明常量的过程中使用;

在模块的第一个过程之前使用const语句声明的常量为模块级常量,可以在该模块的所有过程使用;

在模块的第一个过程之前使用public语句声明的常量为公共常量,公共常量可以在所有模块中使用。

  • 二、变量

  • 1、声明变量,语法:

dim 变量名 as 数据类型

其它声明变量的语句:

private 变量名 as 数据类型        '定义私有变量。

public 变量名 as 数据类型         '定义公有变量。

static  变量名 as 数据类型         '定义静态变量。当程序结束后,静态变量的值会保持不变

  • 2、变量赋值

(1)常用变量赋值

常用变量如:文本、数值、日期、时间、逻辑值等变量,赋值方法:

[let] 变量名=要存储的数据             'let可以省略

如:

dim i as integer

i=10

(2)对象变量赋值

对象变量如:工作簿、工作表、单元格等变量,赋值方法:

set 变量名=要存储的对象名称

如:

dim sht as worksheet           '定义sht为工作表对象变量

set sht=activesheet              '将活动工作表赋给sht对象变量

代码示例:

sub 数据类变量()

  dim i as integer                '定义i为integer类型变量

  i=10                                  '将10赋给变量i

  range("A1").value=i       '将变量i的值,赋给活动工作表的A1单元格

end sub

代码示例:

sub 对象类变量()

  dim sht as worksheet                                   '定义sht为工作表对象变量

  set sht=activesheet                                     '将活动工作表赋给sht对象变量

  sht.range("A1").value="引用对象变量"       '将“引用对象变量”赋给变量sht存储的工作表中                                                                          '的A1单元格

end sub

  • 3、变量的作用域

按作用域分,变量可分为:本地变量、模块变量、公共变量。

变量类型描述及作用域
本地变量在过程内使用dim或static语句声明的变量。其作用域(作用范围)为本过程,即只在声明该变量的过程内使用,其它过程不能使用。
模块变量在模块的第一个过程之前使用dim或private语句声明的变量。其作用域为本模块,即该模块的所有过程都可以使用。
公共变量
在模块的第一个过程之前使用public语句声明的变量。其作用域为所有模块,即所有模块中的所有过程都可以使用。

  • 4、特殊变量:数组

数组也是变量,是同种类型的多个变量的集合。数组分为一维数组、多维数组。多维数组中二维数组用得最多。数组跟其它变量的声明一样,不同的是数组要设置起始和终止索引值。

一维数组声明:

dim 数组名(起始值 to 终止值) as 数据类型

二维数组声明:

dim 数组名(一维起始值 to 一维终止值,二维起始值 to 二维终止值) as 数据类型 

如:

dim arr(1 to 10) as integer                    '声明arr一维数组,索引值从1到10

dim arr(1 to 10,1 to 30) as integer       '声明arr二维数组,一维索引值从1到10,二维从1到30

注意:起始索引值可以省略,如arr(10),arr(4,5),如果起始索引值省略的话,VBA默认起始索引值从0开始。如果要更改默认起始索引值从1开始,必须在模块的第一句写上“Option base 1”。

  • 5、动态数组

当不能确定数组维数大小时,可以先定义一个没有维数的数组,在以后通过Redim语句重新定义其维数的大小,这样的数组就是动态数组。

语法:

dim 数组名(  ) as 数据类型

            .

            .

            .

Redim 数组名(a,b)

示例代码:

sub test()

  dim a as integer

  a=Application.WorkSheetFunction.CountA(range("A:A"))  '用工作表函数counta求当

                                                                                          '前工作表A列中非空单元

                                                                                          '格个数,并赋给变量a

  dim arr( ) as String                                                                  '定义动态数组

  redim arr(1 to a)                                                                     '重定义动态数组

end sub

  • 6、利用函数创建数组

  • (1)使用array函数创建数组

如果要将一组已知的数据存储到数组中,使用VBA中的array函数非常方便。如示例代码:

sub array函数创建数组()

 dim arr as variant                  '定义arr为variant数据类型变量

 arr=array(10,20,30,40)          '使用array函数给arr数组赋值

 msgbox "arr数组的第二个元素为:" & arr(1)      '用对话框显示arr数组的第二个元素

end sub

注:用array函数创建的数组,其起始索引号从0开始,除非已经在模块第一句写入"option base 1"。

  • (2)使用split函数创建数组

如果要将一个字符串按指定的分隔符拆分,将各部分保存到一个数组中,可以使用VBA的split函数。

split函数的语法格式如下:

Split(expression, [ delimiter,] [ limit,] [ compare ])

参数
参数含义
expression
需要拆分的含分隔符的字符串
delimiter参数为拆分的分隔符,如果省略则使用空格做为分隔符
limit指定返回字符串的数量
compare指定拆分子字符串时的比较类型

示例代码:

sub split函数创建数组()

 dim arr as variant

 arr=split("黄河,长江,长城,故宫",",")      '以“,”为分隔符,对“黄河,长江,长城,故宫”进行分隔

 msgbox "arr数组的第二个元素是:" & arr(1)

end sub

注:split函数创建的数组的起始索引号总是从0开始,不管已经在模块第一句写入"option base 1"。.

  • 7、通过单元格区域创建数组

如果要把单元格区域中的数据存储到数组中,可以通过如下代码示例:

sub 单元格区域数据赋给数组()

 dim arr as variant                      '定义arr变量为variant类型

 arr=range("A1:C3").value         '将活动表的A1:C3数据赋给数组arr

 range("E1:G3").value=arr        '将arr数组的值赋给活动表的E1:G3单元格区域

end sub

注:用单元格区域数据给数组赋值,得到的数组是二维数组,并且数组的起始索引号总是从1开始。

  • 8、利用函数求数组的最大索引号和最小索引号

(1)用ubound函数求数组的最大索引号

语句:Ubound(数组名称,维数)

如果求多维数组某维的最大索引号,要指定该维数。

代码示例:

sub 求数组最大索引号()

 dim arr as variant

 arr=array(1,2,3,4,5,6)

 msgbox "数组的最大索引号为:" & ubound(arr)

end sub

(2)用Lbound函数求数组的最小索引号

语句:Lbound(数组名称,维数)

代码示例:

sub 求数组最小索引号()

 dim arr as variant

 arr=array(1,2,3,4,5,6)

 msgbox "数组的最小索引号为:" & Lbound(arr)

end sub

  • 9、求一维数组元素个数:Ubound(数组名称)-Lbound(数组名称)+1

多维数组的元素个数:各维数元素个数相乘

  • 10、用Join函数将一维数组合并成字符串

Join函数与Split函数作用相反。Join函数是将数组中的元素按指定的分隔符连接成新的字符串。

语句:Join(数组名称,"分隔符")

示例代码:

sub 数组连接成字符串()

 dim arr as variant, txt as string

 arr=array(10,20,30,40,50,60)

 txt=join(arr,"&")

 msgbox txt

end sub

  • 11、将数组中的数据写入工作表单元格

(1)单个单元格填充:

如:

range("A1").value=arr(2)          '将数组的arr(2)赋给当前工作表的A1单元格

(2)批量填充单元格区域:

一维数组用来填充单行单元格区域,如果要用一维数组填充单列单元格区域必须用transpose函数进行转换。多维数组用来填充多行多列单元格区域,并且一维对应行,二维对应列。

示例代码:

sub  一维填充单列区域()

  dim arr as variant

  arr=array(1,2,3,4,5,6)

  range("A1:A6").value=application.worksheetfunction.transpose(arr)

end sub

示例代码:

sub 填充多行多列区域()

  dim arr(1 to 2,1 to 3) as string

  arr(1,1)=1

  arr(1,2)="王八"

  arr(1,3)="男"

  arr(2,1)=2

  arr(2,2)="赵香"

  arr(2,3)="女"

  range("A1:C2").value=arr

end sub

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多