vba数组用法(vba中数组怎用)

本文目录
vba中数组怎用
打开Excel表格,点击菜单栏上边的【开发工具】、【Visual Basic】打开VBA器。
请点击输入图片描述
在VBA器的菜单栏上边点击【插入】、【模块】。
请点击输入图片描述
在模块的代码窗口里边输入以下使用Array数组的程序代码。对比之前的VBA程序代码,将会发现后面的程序比较简洁。
Sub CreateText2()
Dim i, j, k, arr
On Error Resume Next
Set mysheet1 = ThisWorkbook.Worksheets("Sheet1")
Set fs = CreateObject("Scripting.FileSystemObject") ’对计算机系统文件进行访问
Set fi = fs.CreateTextFile("d:\Code12345.txt", True) ’在D盘里边创建Code12345.txt文本文件
arr = Array("", "uid=", "last_name=", "frist_name=", "accessibility=", _
"password=", "SAPME:DEFAULT SITE=", "role=", "group=") ’把固定内容写入数组里边
For i = 1 To 1000 ’从第一行到1000行
k = Application.WorksheetFunction.CountIf(mysheet1.Range(mysheet1.Cells(i, 1), _
mysheet1.Cells(i, 8)), "") ’统计空白单元格的个数
If k = 0 Then ’如果单元格空白个数为0则:
j = 0 ’j初始化,数组从0调用
fi.WriteLine (arr(j)) ’把数组里边内容写入文本文档
For j = 1 To 8 ’从第一列到第八列
fi.WriteLine (arr(j) & mysheet1.Cells(i, j)) ’从数组和单元格获取内容写入文本文档
Next
End If
Next
fi.Close
End Sub
请点击输入图片描述
请点击输入图片描述
VBA程序代码解读:
(1)For……Next循环嵌套使用时,外边的For执行一次,待内部的For执行完了之后再执行外边For一次,如此循环,外边的For执行完了之后,循环结束。
(2)Array是数组函数,里边的参数通常是由逗号(,)间隔,其对应值的序号是从0开始的。如:arr=Array("AA","BB","CC"),arr(1)的值为数组里边的第二个(即"BB")。
(3)如果要数组里边对应的值,则点击【视图】、【本地窗口】,再按下【F8】键逐行运行程序,过了数组程序行便可以在“本地窗口”的展开数组里边看到相应的值。
请点击输入图片描述
请点击输入图片描述
运行VBA程序,其执行的结果都是一样的。
请点击输入图片描述
vba中函数使用数组问题
在工作表输入countif函数时候,第一个参数明确告诉你是range,如图
所以你那样引用是不对的,比如以下代码肯定是不行的
Sub test()
Dim a
a = Array(1, 2, 3)
MsgBox Application.CountIf(a, 1)
End Sub
如果你要用这个函数,必须把数组写入单元格,再引用,如下
Sub test()
Dim a
a = Array(1, 2, 3)
= a
MsgBox Application.CountIf(Range("A1:C1"), 1)
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维数组,在写入单元格区域时,区域的大小,与数组的大小需要保持一致
vba中函数使用数组公式
Application.WorksheetFunction.Sum() 要这样写。range是直接引用单元格。共公式里的A1:A10是有区别的。
用符号括起来就支持数组用法了。比如下面这样
Application.WorksheetFunction.Sum()
VBA操作数组
Option Base 1
Sub 数组片段()
Dim i%, arr, arr1(2, 1) ’先定义一个和绿色区域相同大小的数组arr1,2行1列
arr = Range("G2:K6").Value ’把黄色区域的数据读入数组arr,5行5列
For i = 1 To 2 ’用FOR循环为新数组arr1赋值
arr1(i, 1) = arr(i + 2, 3)
Next i
Range("A1").Resize(2) = arr1 ’将单元格区域A1改变大小为2行1列后输入新数组arr1的值
End Sub

更多文章:
Windows批处理命令和使用教程(几个简单的Bat批处理)?怎么批处理文件名
2025年9月16日 07:45
windowsinstaller下载(如何下载Windows Installer Clean Up)
2025年6月24日 21:45
spring festival简笔画(春节怎么画简单又漂亮 二年级)
2026年8月27日 12:00
filesystemobject同时读写(ASP 读取txt 然后累加在写入txt)
2025年11月11日 23:45
marble columns什么意思(matlab里面 column 1 through 3 什么意思)
2026年3月17日 04:30
select按钮什么意思(2ds按键start和select是干什么的)
2025年7月22日 07:45
默克尔: 那时的乌克兰可不是今天(默克尔这番话,武契奇:“颠覆认知”)
2026年7月16日 15:00
datetime数据类型使用几个字符来表示日期和时间(日期的表示方法有几种)
2026年8月24日 22:45
img格式照片画质(img大小怎么设置可以适应不同分辨率的excell)
2025年11月19日 19:00
performclick翻译(帮我把下列英语翻译成中文,急用!)
2026年7月26日 15:00
substring只有一个参数(jquery的substring 怎么使用)
2025年5月26日 11:00
jqc遇到u头上两点要去掉(为什么j q x后加:ü时要去掉两点)
2025年11月16日 12:45
pipeline platform(JDK 7确定B计划 部分特性延迟到JDK 8)
2025年6月13日 18:15










