Vba 表:基础到高级指南
关键点
- 将 VBA 表中的表视为用于存储和组织数据(例如:学生姓名、科目和分数)的迷你数据库。
- 使用之前必须声明一个数组;及其数据类型和要存储在其中的值的数量。
如果您想使用 VBA 处理大数据,您需要了解表以及如何在 VBA 代码中使用它们。在本指南中,您将探索该表的各个方面,我们还将看到一些要使用的示例。他们。
VBA 中的表是什么?
在VBA中,数组是可以存储多个值的变量。您可以一次访问该数组中的所有值,也可以通过指定其索引号(即该值在数组中的位置)来访问单个值。想象一下,您有一个约会,要知道学生的姓名、科目和成绩。
您可以将所有这些信息存储在一个表中,不仅可以存储一个学生的信息,还可以存储数百个学生的信息。这是一个简单的例子来解释表格。
在上面的示例中,您有一个包含十个元素(数组大小)的数组,每个元素都有一个特定的位置(索引)。
因此,如果您想使用第八个位置的元素,则必须使用其索引号来引用该元素。
我们在上面的例子中使用的数组是一个一维数组。但在本指南的后面,我们还将了解多维数组。
如何在VBA中声明数组
正如我上面提到的,数组是变量的类型,因此您需要使用关键字(Dim、Private、Public 和 Static)来声明它。与普通变量不同,声明数组时,必须在数组名称后使用一对括号。
假设您想声明一个我们在上面的示例中使用的数组。
声明数组的步骤。
- 首先,使用关键字“Dim”,输入表名称并键入括号。
- 接下来,您需要指定数组的数据类型。如果没有指定数据类型,VBA 将分配适当的数据类型。
- 之后,您需要定义要在数组中存储的元素数量。
- 最终,要为数组中的元素赋值,必须使用该元素的索引号来标识它,然后为其赋值。
完整代码
Sub vba_array_example() Dim StudentsNames(10) As String StudentsNames(0) = "Waylon" StudentsNames(1) = "Morton" StudentsNames(2) = "Rudolph" StudentsNames(3) = "Georgene" StudentsNames(4) = "Billi" StudentsNames(5) = "Enid" StudentsNames(6) = "Genevieve" StudentsNames(7) = "Judi" StudentsNames(8) = "Madaline" StudentsNames(9) = "Elton" End Sub
快速笔记
- 在上面的代码中,首先有 Dim 语句,它定义了最多可以存储 10 个元素并具有字符串数据类型的一维数组。
- 之后,您将有 10 行代码定义数组的元素从 0 到 9。
具有不同数据类型的表
声明数组时,如果未能指定数据类型,VBA 将自动使用变化的数据类型,导致内存使用量略有增加,而内存使用量的增加可能会降低代码性能。
因此,除非有必要使用变体数据类型,否则最好在声明数组时定义特定的数据类型。
从数组返回信息
正如我之前提到的,要从数组中获取信息,您可以使用元素的索引号来指定其位置。例如,如果您想返回我们在上一个示例中创建的区域的第 8 个元素,则代码将为:
在上面的代码中,您使用数组元素 8 在单元格 A1 中输入了值。
使用选项基数 1
我确信您现在脑子里有这个问题,为什么我们的项目列表从零开始,而不是从 1 开始?
嗯,这不是一个错误。
当编程语言最初被构造时,一些粗心使得这个结构成为了数组中的元素列表。在大多数编程语言中,您可以找到相同的列表项结构。
然而,与大多数其他计算机语言不同,在 VBA 中,您可以标准化索引的工作方式,这意味着您可以使其以 1 开头。您唯一需要做的就是在声明一个之前在模块开头添加一条基于选项的语句。数组.数组。
现在该表将如下所示:
在表中搜索
当您将值存储在数组中时,有时可能需要进行数组查找。
在这种情况下,您需要知道可以使用的方法。现在看下面的代码,它可以帮助您了解如何在数组中搜索值。
Sub vba_array_search() 'this section declares an array and variables _ that you need to search within the array. Dim myArray(10) As Integer Dim i As Integer Dim varUserNumber As Variant Dim strMsg As String 'This part of the code adds 10 random numbers to _ the array and shows the result in the _ immediate window as well. For i = 1 To 10 myArray(i) = Int(Rnd * 10) Debug.Print myArray(i) Next i 'it is an input box that asks you the number that you want to find. Loopback: varUserNumber = InputBox _ ("Enter a number between 1 and 10 to search for:", _ "Linear Search Demonstrator") 'it's an IF statement that checks for the value that you _ have entered in the input box. If varUserNumber = "" Then End If Not IsNumeric(varUserNumber) Then GoTo Loopback If varUserNumber < 1 Or varUserNumber > 10 Then GoTo Loopback 'message to show if the value doesn't found. strMsg = "Your value, " & varUserNumber & _ ", was not found in the array." 'loop through the array and match each value with the _ the value you have entered in the input box. For i = 1 To UBound(myArray) If myArray(i) = varUserNumber Then strMsg = "Your value, " & varUserNumber & _ ", was found at position " & i & " in the array." Exit For End If Next i 'message box in the end MsgBox strMsg, vbOKOnly + vbInformation, "Linear Search Result" End Sub
- 在代码的第一部分中,您有稍后需要在代码中使用的变量。
- 之后,下一部分是使用 RND 生成随机数以获得数组的 10 个值。
- 接下来是一个输入框,用于输入要在表中搜索的值。
- 在此部分中,如果未找到您输入的值,您将在消息框中使用字符串的代码。
- 这部分代码使用循环来遍历数组的每个元素,并检查您输入的值是否在数组中。
- 代码的最后一部分显示一条消息,指示是否找到值。