Excel VBA 数组:类型及使用方法(附示例)

⚡ 智能摘要

Excel VBA 数组将一组相同数据类型的相关值存储在一个名称下,并通过索引访问。本页讲解静态数组和动态数组、一维、二维和多维数组、声明语法以及一个饮料装载示例。

  • 📦 数组概念: 一个包含多个相同数据类型值的单个命名内存位置,这些值通过索引分隔。
  • 🎯 优点: 数组将相关数据分组,减少变量的数量,并加快数据的检索和排序速度。
  • 📌 静态数组: 当元素数量已知时,可以声明为固定大小,例如 Dim ArrayMonth(12) As String。
  • 🔄 动态数组: 使用 Dim ArrayMonth() 声明为空,当元素数量未知时,稍后使用 ReDim 调整大小。
  • 📐 尺寸: 数组使用一个、两个或多个索引来对单个列表、表格或多级数据进行建模。
  • 🧪 示例: 命令按钮使用 Sheet1.Cells 将数组中的四个饮料名称加载到工作表单元格中。

Excel VBA 数组

什么是 VBA 数组?

数组被定义为能够存储多个值的内存位置。所有值必须属于同一数据类型。假设您想将您最喜欢的饮料列表存储在一个变量中,您可以使用 VBA 数组来实现这一点。

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

本教程假设你正在使用 Microsoft Excel 版本 2013。这些知识仍然适用于其他版本的 Microsoft 同样适用于 Excel。

数组的优点是什么?

在编写数组代码之前,了解数组的价值所在很有帮助。以下是 VBA 数组函数的一些优点。

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

VBA 中的数组类型

VBA 支持两种类型的数组,即;

  • 静止 – 这些类型的数组具有固定的预定可存储元素数量。无法更改静态数组的数据类型的大小。当您想要处理已知实体(例如一周中的天数、性别等)时,它们很有用。例如:Dim ArrayMonth(12)作为字符串
  • 动态 – 这些类型的数组没有固定的预定可存储元素数量。当处理无法预定数量的实体时,它们很有用。例如:Dim ArrayMonth() 作为变量

一旦确定了哪种类型适合你的数据,下一步就是每种类型的声明语法。

声明数组的语法

静态数组

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

Dim arrayName (n) as datatype

这里,

Code 操作
Dim 数组名称 (n) 数据类型
  1. 它声明了一个名为 arrayName 的数组变量,其大小为 n,数据类型为。大小是指数组可以存储的元素数量。

动态数组

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

Dim arrayName() as datatype
ReDim arrayName(4)

这里,

Code 操作
Dim 数组名称 () 数据类型
  1. 它声明了一个名为 arrayName 的数组变量,但没有指定元素的数量
ReDim 数组名称(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. 向工作表添加命令按钮

在 Excel VBA 中使用数组

  1. 将 name 属性设置为 cmdLoadBeverages
  2. 将 caption 属性设置为 Load Beverages

你的 GUI 现在应该如下所示

在 Excel VBA 中使用数组

步骤 3 – 保存文件

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

在 Excel VBA 中使用数组

步骤 4 – 编写代码

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

  1. 右键单击“加载饮料”按钮并选择查看代码
  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

这里,

Code 操作
点心饮料(1 至 4)作为字符串
  • 它声明了一个名为 Drinks 的数组变量。第一个数组索引为 1,最后一个数组索引为 4。
饮料(1)=“百事可乐”
  • 将值 Pepsi 赋给第一个数组元素。其他类似代码对数组中的其他元素执行相同操作。
Sheet1.Cells(1, 1).Value = “我最喜欢的饮料”
  • 在单元格地址 A1 中写入值 My Favorite Beverages。Sheet1 引用工作表,Cells(1,1) 引用行号 1 和列 1 (B)
Sheet1.单元格(2,1).值 = 饮料(1)
  • 将索引为 1 的数组元素的值写入第 1 列第 XNUMX 行

测试我们的应用

代码编写完毕后,最后一步是运行按钮并确认数组已填充整个工作表。选择“开发工具”选项卡,确保“设计模式”按钮处于“关闭”状态。其标志是,该按钮的背景应为白色,而不是彩色(绿色)背景。(参见下图)

在 Excel VBA 中测试应用程序

点击加载饮料按钮

您将获得以下结果

在 Excel VBA 中测试应用程序

下载包含上述代码的 Excel

下载上述Excel表格 Code

常见问题

静态数组在声明时就设定了固定的大小,例如 `Dim Arr(12)`。动态数组则使用 `Dim Arr()` 声明为空数组,之后当元素数量事先未知时,可以使用 `ReDim` 调整数组大小。

ReDim 函数用于设置或更改已声明的动态数组的大小。添加 Preserve 关键字,例如 ReDim Preserve Arr(10),会在调整大小时保留现有值;如果没有 Preserve,则会清除所有存储的值。

使用 LBound 和 UBound 函数。LBound 返回最小索引,UBound 返回最大索引。元素个数等于 UBound(Arr) 减去 LBound(Arr) 再加 1,这适用于静态数组和动态数组。

是的。像 Copilot 这样的 AI 助手可以根据简单的请求生成数组声明和循环,例如将十个产品名称加载到一列中。开发人员将代码粘贴到编辑器中,并在工作簿副本上进行测试。

是的。AI 助手会读取“下标超出范围”错误和代码,然后指出超出数组边界的索引,并提出修复建议,例如调整 ReDim 的大小或循环计数器。开发人员应用修复后重新测试。

总结一下这篇文章: