Excel 确实有一些简单的数组操作 - SUMPRODUCT(Matlab 等效项:A*B')、MIN、MAX,...其中大多数,包括 SMALL,都需要使用Application.WorksheetFunction.xxx
; 例如,函数 SMALL 可以在 VBA 中调用如下:
nthSmallest = Application.WorksheetFunction.Small(r, n)
其中 r 是一个数组或范围,n 是介于 1 和r.Cells.Count
我强烈建议您对每个概念变量使用一个变量,而不是试图巧妙地处理一个二维数组中的多个实体。Speedwise 我怀疑差异很小;但是编写不可读代码的机会很重要。
至于加快速度:将变量(尤其是数组)定义为某种固定类型(而不是变体)确实很有帮助,例如:
Dim a(1 To 10) as Double
Dim ii as Integer
让所有数组使用相同的(默认)基数可能会有所帮助。由于我自己是 Matlab 迷,我经常使用从 1 开始的数组索引 - 您可以通过添加在 VBA 中强制执行此操作
Option Base 1
在模块的开头。此时,如果您声明
Dim a(10) as Double
它相当于
Dim a(1 To 10) as Double
对于不精通 VBA 的人来说也是一个很好的做法,添加
Option Explicit
在模块的开头,因为它将确保您未声明的任何变量(或更常见的是您拼写错误)将产生解释器错误。
关于数组的另一件事:作为一个 Matlab 人,您习惯于 Matlab 根据需要增加数组大小。在 VBA 中,可以在运行时动态更改数组大小,例如使用
ReDim Preserve a(1 To 20)
这将使数组a
大小为 20 个元素。如果它更短,它将用零填充;如果它更长,它将被修剪。这可能很有用,但非常昂贵,因为通常需要将整个数组复制到新位置。当您事先不知道您的数组有多大时,最好高估(并检查边界)而不是每次需要变大时都重新调整 - 并在最后ReDim
进行最终处理以使其达到正确的大小。
希望这足以让您开始!