我想将一个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)
答案 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