Excel VBA 数组:什么是数组、如何使用及 VBA 中的数组类型

什么是 VBA 数组?

数组被定义为能够存储多个值的内存位置。所有值必须是相同的数据类型。假设您想将一系列您喜欢的饮料存储在单个变量中,您可以使用 VBA 数组来完成。

通过使用数组,您可以引用具有相同名称的相关值。您可以使用索引或下标来区分它们。单个值被称为 Excel VBA 数组的元素。它们从索引 0 开始,一直到最高索引值,是连续的。

本教程假设您使用的是 Microsoft Excel 2013 版本。这些知识同样适用于其他版本的 Microsoft Excel。

数组有什么优点?

以下是 VBA 数组函数提供的一些好处:

  1. 将逻辑上相关的数据分组在一起 – 假设您想存储一个学生列表。您可以使用一个单一的数组变量,其中包含学生类别的不同位置,例如幼儿园、小学、中学、高中等。
  2. 数组使编写可维护的代码变得容易。对于相同逻辑上相关的数据,它允许您定义一个变量,而不是定义多个变量。
  3. 更好的性能 – 一旦定义了数组,检索、排序和修改数据速度会更快。

VBA 中的数组类型

VBA 支持两种类型的数组:

  • 静态 – 这些类型的数组具有预先确定的固定元素数量。无法更改静态数组的数据类型大小。当您想处理已知实体(例如一周的天数、性别等)时,它们很有用。例如: Dim ArrayMonth(12) As String
  • 动态 – 这些类型的数组没有预先确定的固定元素数量。当处理您无法预先确定数量的实体时,它们很有用。例如: Dim ArrayMonth() As Variant

声明数组的语法

静态数组

声明**静态**数组的语法如下:

Dim arrayName (n) as datatype

此处,

代码 行动
Dim arrayName (n) datatype
  1. 它声明一个名为 arrayName 的数组变量,大小为 n,数据类型为 datatype。大小是指数组可以存储的元素数量。

动态数组

声明**动态**数组的语法如下:

Dim arrayName() as datatype
ReDim arrayName(4)

此处,

代码 行动
Dim arrayName () datatype
  1. 它声明一个名为 arrayName 的数组变量,而不指定元素数量。
ReDim arrayName(4)
  1. 它在定义数组后指定数组大小。

数组维度

数组可以是一维、二维或多维的。

  • 一维:在此维度中,数组仅使用一个索引。例如,每个年龄段的人数。
  • 二维:在此维度中,数组使用两个索引。例如,每个班级有多少学生。它需要班级数量和每个班级中的学生数量。
  • 多维:在此维度中,数组使用两个以上的索引。例如,白天的温度。(30、40、20)。

如何在 Excel VBA 中使用数组

我们将创建一个简单的应用程序。此应用程序将 Excel 工作表填充为数组变量中的数据。在此 VBA 数组示例中,我们将执行以下操作:

  • 创建一个新的 Microsoft Excel 工作簿,并将其另存为 Excel 启用宏的工作簿 (*.xlsm)
  • 向工作簿添加一个命令按钮
  • 设置命令按钮的名称和标题属性
  • 编程 VBA 以填充 Excel 工作表

让我们一步一步地进行这个练习,

步骤 1 – 创建新工作簿

  1. 打开 Microsoft Excel
  2. 将新工作簿另存为 VBA Arrays.xlsm

步骤 2 – 添加命令按钮

注意:本节假设您熟悉在 Excel 中创建界面的过程。如果您不熟悉,请阅读教程 VBA Excel 表单控件和 ActiveX 控件。它将向您展示如何创建界面。

  1. 向工作表添加命令按钮

Use Array in Excel VBA

  1. 将名称属性设置为 cmdLoadBeverages
  2. 将标题属性设置为 Load Beverages

您的 GUI 现在应如下所示:

Use Array in Excel VBA

步骤 3 – 保存文件

  1. 点击另存为按钮
  2. 选择 Excel 启用宏的工作簿 (*.xlsm),如下图所示:

Use Array in Excel VBA

步骤 4 – 编写代码

现在我们将为我们的应用程序编写代码。

  1. 右键单击 Load Beverages 按钮并选择“查看代码”。
  2. 将以下代码添加到 cmdLoadBeverages 的点击事件中:
Private Sub cmdLoadBeverages_Click()
    Dim Drinks(1 To 4) As String
     
    Drinks(1) = "Pepsi"
    Drinks(2) = "Coke"
    Drinks(3) = "Fanta"
    Drinks(4) = "Juice"
     
    Sheet1.Cells(1, 1).Value = "My Favorite Beverages"
    Sheet1.Cells(2, 1).Value = Drinks(1)
    Sheet1.Cells(3, 1).Value = Drinks(2)
    Sheet1.Cells(4, 1).Value = Drinks(3)
    Sheet1.Cells(5, 1).Value = Drinks(4)
End Sub

此处,

代码 行动
Dim Drinks(1 To 4) As String
  • 它声明了一个名为 Drinks 的数组变量。第一个数组索引是 1,最后一个数组索引是 4。
Drinks(1) = “Pepsi”
  • 将值 Pepsi 分配给第一个数组元素。其他类似的将对数组中的其他元素执行相同的操作。
Sheet1.Cells(1, 1).Value = “My Favorite Beverages.”
  • 在单元格地址 A1 中写入值 My Favorite Beverages。Sheet1 引用工作表,Cells(1,1) 引用第 1 行和第 1 列(B)。
Sheet1.Cells(2, 1).Value = Drinks(1)
  • 将索引为 1 的数组元素的值写入第 1 列的第 2 行。

测试我们的应用程序

选择“开发工具”选项卡,并确保“设计模式”按钮已“关闭”。指示是它将具有白色背景而不是彩色(绿ish)背景。(参见下图)

Testing an Application in Excel VBA

点击 Load Beverages 按钮。

您将看到以下结果

Testing an Application in Excel VBA

下载包含上述代码的 Excel 文件

下载上面的 Excel 代码

摘要

  1. 数组是能够存储多个值的变量。
  2. Excel VBA 支持静态和动态数组。
  3. 与声明大量用于逻辑上相关数据的变量相比,数组可以轻松编写可维护的代码。