VBA:总结一个matrix

为什么这个function不起作用?

在Excel中input=funtest(2.1) ,它会给我#VALUE!

 Public Function funtest(a As Double) As Double Dim z, j, i As Integer Dim matrix(3, 3, 3) As Double For z = 0 To 3 Step 1 For j = 0 To 3 Step 1 For i = 0 To 3 Step 1 matrix(z, j, i) = a Next i, j, z funtest = Application.WorksheetFunction.Sum(matrix) End Function 

WorksheetFunction.Sum将与范围或2维数组一起使用。 它错误,因为你正在传递一个3维数组。

所以,这个工作

 Public Function funtest(a As Double) As Double Dim z As Long, j As Long, i As Long Dim matrix() As Double ReDim matrix(0 To 3, 0 To 4) For j = LBound(matrix, 1) To UBound(matrix, 1) For i = LBound(matrix, 2) To UBound(matrix, 2) matrix(j, i) = a Next i, j funtest = Application.WorksheetFunction.Sum(matrix) End Function 

注意我已经修改了你的声明,见答案结尾处的注释。

总结更高维数组,你将需要做一些循环。

一个选项(可能适合或不适合你的总体要求)是以不同的方式声明你的数组,就像所谓的Jagged Array

 Public Function funtest2(a As Double) As Double Dim z As Long, j As Long, i As Long Dim matrix() As Variant Dim InnerMatrix(0 To 4, 0 To 4) As Double ' Dimension Jagged Array ReDim matrix(0 To 4) For i = LBound(matrix, 1) To UBound(matrix, 1) matrix(i) = InnerMatrix Next 'Load Data into matrix For z = LBound(matrix) To UBound(matrix) For j = LBound(matrix(z), 1) To UBound(matrix(z), 1) For i = LBound(matrix(z), 2) To UBound(matrix(z), 2) matrix(z)(j, i) = a Next i, j, z ' Sum matrix For z = LBound(matrix) To UBound(matrix) funtest2 = funtest2 + Application.WorksheetFunction.Sum(matrix(z)) Next End Function 

这是一个2维数组的数组。 Sum然后依次应用于每个内部arrays。 这样,至less你只循环一个维度,而不是全部三个。

注意DimInteger
您必须指定所有的As Type ,否则variables默认为Variant
在你的代码中, zj将是Variants

另外,使用Integer而不是Long在32位操作系统上实际上是反生产的: Long会略快一些。

当你说“我试图解决一个(3,3,3)matrix的简单情况,每个元素等于一个双精度的时候,我会直接带你”。 这将做到这一点:

 Public Function funtest(a As Double) As Double funtest = 4*4*4*a End Function 

首先,当你获得#VALUE! 这意味着有一个错误,这可能意味着使用一个无效的matrix。

要回答您的问题,您的代码不起作用,因为您的语法不正确。 以下函数根据值创buildmatrix。

 Function FQ_matrix_create(StartValue As Double, Interval As Double, nrow As Long, ncol As Long) As Double() Dim M() As Double ' Creates matrix with sequential element values with given row and ' column sizes. Fills matrix row-wise with numbers. ' - set Interval = 0 for constant element values ' - error input arguments nrow and ncol are not positive integers 

要SUM值使用:

 Function FQ_matrix_element_sum(M() As Double, SumOption As MatrixDirection) As Double() ' Returns the sum of elements of matrix M, either row or column wise ' - Rowwise sum returns a horizontal 1xNcol matrix ' - Columnwise sum returns a vertical 1 xNrow matrix ' - Element sum (all elements) returns a 1x1 matrix ' - error if M is not a matrix ' - error if SumOption is not 1 (nRowWiseSum) or 2 (nColWiseSum) or 3 (nElementSum) 

为了帮助您理解Excel VBA中的Matrix,下面是一个很好的资源: http : //finaquant.com/download/matrixvectorvba

具体来说,请查看网站上的PDF下载。