vba数组,vba数组赋值给单元格区域
如何在vba中声明数组
1、vba中使用Dim关键字声明数组,Dim关键字的后面是数组名称,名称之后要有括号,然后括号之后可以指明数组的长度,也可用to关键字指明范围,最后则是用as 关键字指明类型,具体的格式见下图:
2、下面用一个实例来说明用法,首先在表格中有6000个数值,筛选出大于90的数值将其复制至B栏或C栏,分别用两种方法来写代码,一种方法不含数组,另二种方法含有数组,比较两种方法的速度:
2、在Excel工作表中,点击菜单栏开发工具,在其工具栏内,点击visual basic:
3、此时会进入VBA编辑界面,点击菜单栏插入,在其下拉菜单中选择模块:
4、此时软件会弹出模块编辑窗口,这里就可以输入vba的代码:
5、在代码编辑窗口输入带数组和不带数组的两种代码,这里可以看到用Dim关键字声明了一个6000个元素的数组:
6、在工作表界面的开发工具菜单下,点击插入按钮插入表单控件,分别与两组代码关联:
7、点击筛选数据1按钮,即不含数组,程序运行的时间了13.4219秒:
8、点击筛选数据2按钮,即含数组的一组,程序运行的时间为0.0313秒,可以看到这种方法快多了吧:
VBA数组如何筛选?
Filter函数实现数组筛选:
数组的筛选就是根据一定的条件,从数组中筛选符合条件的值,组成一个新的数组,实现数组筛选的VBA函数是:
Filter函数
用法:Filter(数组,
筛选的字符,
是否包含)
Sub
DD()
arr1
=
VBA.Filter(arr,
"A",
True)
'筛选所有含A的数值组成一个新数组
arr2
=
VBA.Filter(arr,
"A",
False)
'筛选所有不含A的数值组成一个新数组
MsgBox
Join(arr2,
",")
'查看筛选的结果End
Sub遗憾的是函数只能进行模糊筛选,不能精确匹配。
VBA笔记:数组
声明1个1~50的数组,可以将区间值写出来
Dim SZ(1 To 50) As String
也可以用"个数"来标识,比如上述的 1 to 50 可以用 49 来替代(0~49的意思,总计50个数字)
Dim SZ(49) As String
我们还可以模块的开始,就设定好数组的索引值从1开始(1~50)
当数组声明好了之后,我们可以给数组赋值
比如,给数组的第15个元素赋值的方法如下:
SZ(14) = "100"
给一个数组集体赋值的方式:
VBA还支持 横向、纵向 同时存在的列表型数组,比如,我们声明一个3*20的数组
Dim SZ (1 to 3 , 1 to 20)
当然,也可以用个数来表示数组
假设,有4个高3层、宽5格的货架,用数组可以这样来表示
与单维数组的赋值方式一样
当无法确定数组的存储元素多少时,我们可以先声明一个空的数组:
Dim SZ ()
然后,再通过ReDim语句来重新声明数组的大小
数组内,参数间用英文逗号分隔,参数支持数字、文本
数组的索引号默认从0开始,除非在模块中的第1句已经写入了"Option Base 1"语句
数组内,参数间用英文逗号分隔,参数仅支持文本 (需要确认)
数组的索引号默认从0开始,无论是否已写入"Option Base 1"语句
可以把一个单元格区域的值存到数组里,也可以把数组里的值写到单元格里去 (单元格区域的大小必须一致)
通过UBound和LBound函数,可以计算数组的最大、最小索引号
UBound(arr) ‘返回数组的最大索引号
LBound(arr) ‘返回数组的最小索引号
UBound(arr) - LBound(arr) +1 ‘返回数组一共有多少个元素
如果是一个多位数组,还需要指定数组的维度,比如:
使用join函数,可以将数组里的所有元素,通过一个指定的拼接符号,拼成一个新的字串
使用range函数,可以将数组写入单元格、区域
无论1维数组还是2维数组,在写入单元格区域时,区域的大小,与数组的大小需要保持一致
excel vba中如何定义数组,并赋值
大家好,我们今日继续讲解VBA代码解决方案的第110讲内容:VBA数组讲解:什么是数组,如何定义数组,如何创建数组
一、什么是数组 就是数组共享一个名字,有着多个元素按顺序排列的变量。在数组中,元素通过索引加以区分。这里我把数组的元素看做变量来对待,大家要注意,这个观点在应用过程中是非常有意义的。
二、如何定义数组 声名数组同声明其他变量的方式一样,唯一不同的是数组有大小,即有多少个元素,或者说变量,还有就是要说明数组的维数。
如下面的代码:
Sub Mynzsmart()
Dim i As Integer, j As Integer
Dim arr(1 To 10, 1 To 2) As Integer '定义一个10*2的二维数组(10行,2列)
j = 1 '数组1 to 10的索引号
For i = 1 To 20 Step 2
arr(j, 1) = i '赋值
arr(j, 2) = i + 1 '赋值
j = j + 1 '索引号增加
Next
[a1:b65536].Clear '清除原有数据
[a1].Resize(10, 2) = arr '将数组赋值给A1单元格向下10行,向右2列的区域
End Sub
代码截图:
运行后:
三、动态数组
在上面的讲解中我们知道,声明一个数组,必须指定数组的大小,即它是几维数组,有多少个元素。但有些时候,我们在定义数组的时候,并不能确定数组的大小,这时,我们在首次定义数组的时候括号内为空(当然先指定一个大小也是可以的,但纯属是多余),在程序过程中用Redim语句去重新指定数组的大小,这就是动态数组。
比如一个工作表的C列存储了学生姓名,现在我们需要把把有姓“王”的学生存储在数组arr中,预先我们并不知道C列姓王的学生有三十个还是五十个,所以,我们在定义时代码可以这样:
代码:
Sub MyNZsmarttwo()
Dim i%, xrow%, j%, xcount%
Dim arr() As String
erow = [c65536].End(3).Row '最后一个非空单元格行号
j = 1 '数组索引号
xcount = Application.WorksheetFunction.CountIf([c1:c65536], "王*") '统计有多少姓王的学生
ReDim arr(1 To xcount) '重新定义数组大小,元素共有xcount个
vba数组怎么赋值?
工具/材料:Microsoft Office Excel2016版,Excel表格。
1、首先选中Excel表格中要数组赋值的单元格内容。
2、然后在该界面中,点击“插入”里“表单控件”里“按钮”选项。
3、再者在该界面中,在表格中生成按钮控件,修改控件名称。
4、其次在该界面中,点击“查看代码”选项。
5、继续在VBA界面中,输入定义一维数组的语句。
6、然后在VBA界面中,输入给单元格赋值一维数组的语句。
7、最后在该界面中,单元格里成功显示数组赋值结果。
VBA数组的定义与赋值
可直接定义,但是不能直接赋值,可参考以下代码:
1、Dim arr(1 to 3) as string
如此定义,但是不能直接给数组赋值
如果想直接给数组直接赋值,需要如下操作:
Dim arr() as Variant
arr=Array("a","b","c")
2、Dim A As Variant
A = Array(10,20,30)
B = A(2)
array函数返回的是变体型,要用该函数是不能给数组变量赋值
扩展资料:
VBA的常用内置函数:
MsgBox
InputBox
舍入函数:Fix 向0取整,Int向下取整, Round四舍五入
Rnd: 返回0-1内的单精度随机数
字符串函数:
Filter:对字符串的一维数组的过滤
InStr([Start, ]Str1,Str2[, Compare])与InStrRev: 查找子串
Len:字符串长度
Join:连接一维数组中的所有子字符串
Left,Right,Mid: 截取子字符串
Space(数值) :生成空格字符串
Ucase,Lcase:大小写转换函数
Ltrim, Rtrim,Trim :删除首尾空格
Replace
Split:分割一个字符串成为一维数组
StrComp:字符串比较
StrConv:字符串转换
String(number, character):制定字符重复若干次
参考资料来源:百度百科-VBA (Visual Basic宏语言)