什么是 Excel 中的 VBA 数组以及如何编程

VBA多年来一直是Microsoft Office套件的一部分。虽然它不具备完整 VB 应用程序的全部功能和功能,但VBAOffice用户提供了集成Office产品和自动化您在其中执行的工作的灵活性。

VBA中最强大的工具之一是将整个数据范围加载到称为数组的单个变量中的能力。通过以这种方式加载数据,您可以以多种方式对该范围的数据进行操作或计算。

那么什么是VBA数组呢?在本文中,我们将回答这个问题,并向您展示如何在您自己的 VBA 脚本(your own VBA script)中使用它。

什么是 VBA 数组?

在Excel(Excel)中使用VBA数组非常简单,但如果您从未使用过数组,那么理解数组的概念可能会有点复杂。

将数组想象(Think)成一个盒子,里面有部分。一维数组是一个有一行部分的盒子。二维数组是一个有两行截面的盒子。

您可以按照您喜欢的任何顺序将数据放入此“框”的每个部分。

在您的VBA脚本的开头,您需要通过定义您的VBA数组来定义这个“盒子”。因此,要创建一个可以保存一组数据的数组(一维数组),您可以编写以下行。

Dim arrMyArray(1 To 6) As String

稍后在您的程序中,您可以通过引用括号内的部分将数据放入此数组的任何部分。

arrMyArray(1) = "Ryan Dube"

您可以使用以下行创建一个二维数组。

Dim arrMyArray(1 To 6,1 to 2) As Integer

第一个数字代表行,第二个数字代表列。所以上面的数组可以包含一个 6 行 2 列的范围。

您可以使用数据加载此数组的任何元素,如下所示。

arrMyArray(1,2) = 3

这会将 3 加载到单元格 B1 中。

数组可以将任何类型的数据作为常规变量保存,例如字符串、布尔值、整数、浮点数等。

括号内的数字也可以是变量。程序员通常使用 For循环(Loop)来计算数组的所有部分,并将电子表格中的数据单元格加载到数组中。您将在本文后面看到如何执行此操作。

如何在 Excel 中编写 VBA 数组

让我们看一个简单的程序,您可能希望将电子表格中的信息加载到多维数组中。

例如,让我们看一个产品销售电子表格,您希望从电子表格中提取销售代表的姓名、商品和总销售额。

请注意,在VBA中,当您引用行或列时,您从左上角从 1 开始计算行和列。所以 rep 列是 3,item 列是 4,总列是 7。(rows and columns)

要在所有 11 行中加载这三列,您需要编写以下脚本。

Dim arrMyArray(1 To 11, 1 To 3) As String
Dim i As Integer, j As Integer
For i = 2 To 12
For j = 1 To 3
arrMyArray(i-1, j) = Cells(i, j).Value
Next j
Next i

您会注意到,为了跳过标题行,第一个 For look 中的行号需要从 2 而不是 1 开始。这意味着您需要在加载单元格值时为数组行值减去 1使用Cells (i, j).Value进入数组。

在哪里插入VBA 数组脚本(Your VBA Array Script)

要在Excel(Excel)中放置VBA脚本,您需要使用VBA编辑器。您可以通过选择“开发人员(Developer)”菜单并在功能区的“控件(Controls)”部分中选择“查看代码”来访问它。(View Code)

如果您在菜单中没有看到开发人员(Developer),则需要添加它。为此,请选择文件(File)选项(Options)以打开 Excel 选项窗口。

将选择命令从下拉菜单更改为所有命令(All Commands)。从左侧菜单中选择Developer ,然后选择(Developer)Add按钮将其移动到右侧的窗格中。选中复选框以启用它,然后选择OK完成。

代码编辑器(Code Editor)窗口打开时,确保在左侧窗格中选择了您的数据所在的工作表。在左侧下拉列表中选择工作表并在右侧选择(Worksheet)激活(Activate)。这将创建一个名为Worksheet_Activate () 的新子例程。

只要打开电子表格文件,此函数就会运行。将代码粘贴到此子例程内的脚本窗格中。

该脚本将处理 12 行,并从第 3 列加载代表名称、从第 4 列加载项目以及从第 7 列加载总销售额。

完成两个 For 循环后,二维数组 arrMyArray 将包含您从原始工作表中指定的所有数据。

在 Excel VBA 中操作数组

假设您要对所有最终销售价格征收 5% 的销售税,然后将所有数据写入新工作表。

您可以通过在第一个循环之后添加另一个 For 循环来执行此操作,并使用命令将结果写入新工作表。

For k = 2 To 12
Sheets("Sheet2").Cells(k, 1).Value = arrMyArray(k - 1, 1)
Sheets("Sheet2").Cells(k, 2).Value = arrMyArray(k - 1, 2)
Sheets("Sheet2").Cells(k, 3).Value = arrMyArray(k - 1, 3)
Sheets("Sheet2").Cells(k, 4).Value = arrMyArray(k - 1, 3) * 0.05
Next k

这会将整个数组“卸载”到Sheet2中,另外一行包含税额乘以 5% 的总数。

生成的工作表将如下所示。

如您所见,Excel中的(Excel)VBA数组非常有用,并且与任何其他 Excel 技巧(any other Excel trick)一样通用。 

上面的例子是一个非常简单的数组使用。您可以创建更大的数组并对存储在其中的数据执行排序、平均或许多其他功能。

如果您想获得真正的创意,您甚至可以创建两个数组,其中包含来自两个不同工作表的一系列单元格(containing a range of cells),并在每个数组的元素之间执行计算。

应用程序仅受您的想象力限制。



About the author

我是一名计算机技术人员,拥有超过 10 年的经验和使用 Android 设备的经验。过去五年我也一直在办公室工作,在那里我学会了如何使用 Office 365 和 MacOS。在业余时间,我喜欢花时间在户外听音乐或看电影。



Related posts