VBA变量数组redim / resize内部函数

时间:2015-06-12 19:27:38

标签: vba

我想将一个Nx1数组传递给一个函数,然后返回一个Mx1数组(即只将该数组截断为M大小)。我强烈希望尽可能高效地做到这一点。

这似乎不起作用:

Public Function cutarray(A As Variant, M As Integer)
    ReDim Preserve A(1 To M)
    cutarray = A
End Function

这似乎应该是显而易见的,我只是遗漏了一些东西。

另外我应该提到我直接从excel调用此函数,例如=cutarray(A1:A5000,75)

3 个答案:

答案 0 :(得分:1)

首先,你需要阅读你的问题并告诉我们什么不起作用。我猜你正在研究一个固定长度的数组

dim v(4) <-- is a fixed size array.  

尝试重新启动时会导致错误。要解决你将声明一个空数组,然后将其重新调整为大小

Dim v()
redim v(4)

现在你可以将它传递给你的函数并让它返回而不会出错。另外,作为注释,除非设置基本选项1,否则数组从索引0开始。在调整数组大小或丢失第一个元素时请记住这一点。

答案 1 :(得分:0)

我相信你还需要将参数设置为动态数组。如果不需要,至少可以通过良好做法来记录电话。

Public Function Cutarray(a()作为变体,m作为整数)

还要确保您没有尝试更改下限,如果输入数组最初声明为0 base,则会产生错误。您可以使用保留但不低于更改上限。

我只想将其更改为: Redim Preserve A(M)

答案 2 :(得分:0)

我明白了。当你从excel传入一个数组时,它实际上是一个X维度为1的二维数组.ReDim只更改最右边的维度(在本例中为1),因此任何大于1的M都是下标 - -range。

这解决了它,但效率低下:

Public Function cutarray(A As Variant, i As Integer)
    A = Application.Transpose(A)
    ReDim Preserve A(0 To i)
    A = Application.Transpose(A)
    cutarray = A
End Function