如何有效分配和使用数组长度VBA数组长度
Visual Basic for Applications是一种重要的面向对象和事件驱动的编程语言。阵列是VBA的重要组成部分。如果你想处理大量的数据数组是必需的。今天,在这个中级教程中,我们将带您了解数组长度的概念。我们假设您熟悉VBA和编程基础。如果没有,你可以在Excel VBA上介绍此介绍性课程或者经历这本优秀的教程有助于您概述VBA
什么是数组
数组是一组变量,它共享相同的数据类型和名称。当我们使用单个项目时,只需要一个变量。但是,如果我们有类似类型的项目列表,则为每个项目声明变量没有意义。如果我们可以声明一系列变量,这更好。例如,如果我们需要一百个员工姓名,而不是声明100个不同的变量,最好只声明一个数组.By默认值,VBA阵列的下标在0开始时称为阵列的下限。它运行到您在dim语句中指定的号码,称为数组的上限。以下是您需要了解的一些事情。
- 数组大小
数组大小限制取决于其数据类型和可用内存。可用内存取决于您的系统。常见的数据类型包括Integer、long Integer和Byte。如果您对编程细节感兴趣,那么这里有一个有趣的信息:VBA会自动将整数数据类型转换为长整数。
- 阵列长度
数组。长度属性给出了数组包含的元素的数量。它不同于数组所需的内存存储量。你可以了解更多关于VBA的数组处理与这个令人敬畏的课程。
数组类型
- 单维数组
以线性形式表示和存储数据的数组称为单维或一维数组。VBA数组的语法是这样的:
Dim arrayName(index) as dataType Dim EmpName(10) as String Dim EmpName(1 ~ 10) as String
- 多维数组
它是一个包含一个或多个数组的数组。二维数组可以用包含行和列的表表示。这里,一个索引表示行,另一个索引表示列。二维数组的语法如下所示。下图清楚地说明了这个概念。
Dim ArrayName(Num1,Num2)为DataType,例如,DIM分数(3,3)为整数
为什么要使用动态阵列?
如果你不确定数组中需要多少下标,你应该怎么做?您可以猜测正确的数字,但这几乎总是会使您面临以下问题之一。如果您的猜测太低,并且试图访问高于数组上界的下标,VBA将生成错误消息。如果您的猜测过高,VBA仍然会将内存分配给数组中未使用的部分,因此您将浪费宝贵的系统资源。解决方案是使用动态数组。
- 动态数组- 动态阵列可以在函数运行时在尺寸中更改。换句话说,它可以改变变量的数量。
- 静态阵列 -静态数组在编译时分配内存,并在程序的整个持续时间内存在。
让我们看一个简单的一维数组程序。如果你想要一个尖峰进入其他例子,你总是可以请参阅Excel先生的excel vba课程。
例1:
Sub CommandButton1_Click()昏暗的EmpName(5)作为字符串为i = 1到5 EmpName(i) = InputBox(“输入员工名称”)单元格(i, 1) = EmpName(i)下一个结束Sub
在这个程序中,我们将EmpName声明为一个大小为5、数据类型为string的数组。使用For循环,我们遍历数组并将其初始化为不同的雇员名称。
在一行中声明多个数组。
可以在单行中声明多个数组。要了解它的完成,请查看此程序
子CommandButton1_Click()暗EmpName(3)作为字符串,EmpID(3)作为字符串,Empsal(3)作为单一i = 1到3 EmpName (i) = InputBox(“输入员工姓名”)EmpID (i) = InputBox(输入雇员ID) Empsal (i) = InputBox(“输入员工工资”)细胞(我,1)= EmpName(细胞(我,2)= EmpID(我)细胞(我,3)= Empsal下结束子(i)
在此程序中,声明了三个数组。所有这些都有三个。EmpName和Empidare声明为字符串阵列。粉刺是一个整数数组。我们使用For循环来迭代阵列并将数组元素初始化为各个值。
示例3:多维数组
如果公司希望在2天内追踪5个新加入员工的表现,可以在Excel VBA中创建5×2数组,由电子表格中的5倍2表表示。查看此程序以制作它更清晰
Sub CommandButton1_Click()昏暗的Salesvolume(2到6,2至3)作为单个DIM EMP作为整数,日为EMP = 2到6日的一天= 2 To3 SalesVolume(EMP,Day)= InputBox(“输入销售量”)细胞(EMP,Day)= Salesvolume(EMP,Day)第二天下一个EMP结束子
在这个程序中,使用两个for循环来接收销售量。然后将它们显示在电子表格中员工姓名的旁边。
例4:在VBA中使用数组计算平均值的程序
双功能平均(ListOfNumbers(),长度为整数)暗淡的x作为counter1 = 0的整数(长度- 1)x = x + ListOfNumbers (counter1)下平均= x /长度结束子昏暗的数组(3)双数组(0)= 3数组(1)= 4组(2)= 5 =平均(数组长度)
在此程序中,我们使用for循环来添加变量的总值。最后,我们将总值除以阵列的长度。结果是平均值。当然,而不是使用这个程序,你可以随时直接使用平均函数。查看此Excel VBA课程以查看它是如何完成的。
示例5:从工作表读取到VBA数组
Dim Arr()作为Variant Arr =范围(“B1:C10”)DIM R1AS长DIM C1AS,对于R1 = 1至Ubound(Arr,1)'第一个阵列维度是行。对于C1 = 1到Ubound(Arr,2)'第二阵列维度为列。debug.printarr(R1,C1)下一个C1下一个R1
该程序从工作表中获取数据,并使用for循环输出值。如果您的数据范围是单个单元格,则可以使用此程序。
Dim Arr()作为变体暗淡rangenameas字符串Dim R1AS长昏暗C1AS长暗rr1as范围范围rangename =“therange”设置rr1 =范围(范围)如果rr1.cells.count = 1那么RedimArr(1到1,1至1)arr(1,1)= rr1.Value els arr =范围(范围)结束如果
例6:在动态数组中存储工作表名称的程序
还记得我们说过的动态数组吗?当你事先不知道所需数组的大小时,最好使用动态数组。在下一个示例中,我们将向您展示如何使用动态数组来存储名称。
子StuStWorksheetNames1()昏暗的SheetNames()作为字符串Dim TotalSheets作为整数昏暗的表格作为工作表暗淡的暗情我作为整数Dim strMessage作为字符串Totalsheets = ActiveWorkBook.Worksheets.Count RedimsheetNames(TotalSheets)对于i = 1 tototalsheets stortName(i - 1)= ActiveWorkbook.worksheets(i).name next strmessage =“以下是工作表名:”&vbcrlf for i = 0 tototalsheets - 1 strmessage = strmessage&stortnames(i)&vbcrlf next msgboxstrmessage结束子
学习编程的最佳方式是为自己尝试。所以请确保你得到了很多练习。如果你陷入任何点,你可以随时跳到这个终极的VBA课程来帮你一把!