变量可以更改存储在其中的数据,而常量不可以,这就是常量和变量最主要的区别。常量是用来存储一些固定不变的数据。
const 常量名称 as 数据类型=常量数据
在过程内使用const语句声明的常量为本地常量,只可以在声明常量的过程中使用; 在模块的第一个过程之前使用const语句声明的常量为模块级常量,可以在该模块的所有过程使用; 在模块的第一个过程之前使用public语句声明的常量为公共常量,公共常量可以在所有模块中使用。
dim 变量名 as 数据类型 其它声明变量的语句: private 变量名 as 数据类型 '定义私有变量。 public 变量名 as 数据类型 '定义公有变量。 static 变量名 as 数据类型 '定义静态变量。当程序结束后,静态变量的值会保持不变。
(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
按作用域分,变量可分为:本地变量、模块变量、公共变量。
数组也是变量,是同种类型的多个变量的集合。数组分为一维数组、多维数组。多维数组中二维数组用得最多。数组跟其它变量的声明一样,不同的是数组要设置起始和终止索引值。 一维数组声明: 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”。
当不能确定数组维数大小时,可以先定义一个没有维数的数组,在以后通过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
如果要将一组已知的数据存储到数组中,使用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"。
如果要将一个字符串按指定的分隔符拆分,将各部分保存到一个数组中,可以使用VBA的split函数。 split函数的语法格式如下: Split(expression, [ delimiter,] [ limit,] [ compare ])
示例代码: sub split函数创建数组() dim arr as variant arr=split("黄河,长江,长城,故宫",",") '以“,”为分隔符,对“黄河,长江,长城,故宫”进行分隔 msgbox "arr数组的第二个元素是:" & arr(1) end sub 注:split函数创建的数组的起始索引号总是从0开始,不管已经在模块第一句写入"option base 1"。.
如果要把单元格区域中的数据存储到数组中,可以通过如下代码示例: 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开始。
(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
多维数组的元素个数:各维数元素个数相乘
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
(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 |
|
来自: 亭上凉风 > 《Excel VBA》