到目前为止,我发现答案的关键在于
MMULT
,将行*列相乘返回数组。
Sub Multiply_1D_byConstant()
Dim arr1 As Variant: arr1 = Array(1, 4, 3, 5, 10, 15, 13, 11, 6, 9)
With Application
Dim x As Long: x = 3 'Our constant
Dim y As Long: y = UBound(arr1) + 1
Dim arr2 As Variant: arr2 = .Evaluate("TRANSPOSE(ROW(" & x + 1 & ":" & x + y + 1 & ")-ROW(1:" & y + 1 & "))")
Dim arr3 As Variant: arr3 = .Evaluate("TRANSPOSE(ROW(1:" & y & "))")
Dim arr4 As Variant: arr4 = .Index(.MMult(.Transpose(arr1), arr2), arr3, 1)
End With
End Sub
在这里
.Evaluate
Ubound(arr1)+1
.在上述情况下:
{3,3,3,3,3,3,3,3,3,3}
.Transpose
arr1在我们的
.MMult(.Transpose(arr1), arr2)
.Index
。上述结果将是:
{3, 12, 9, 15, 30, 45, 39, 33, 18, 27}
.MMult
然后,因为我们基本上给
指数
阵列状
{1,2,3,4,5,6,7,8,9,10}
,但以动态方式,对于行,第一列仅为1,
指数
将一维数组乘以一维数组
这也会起同样的作用。让我们想象一下下面的情景:
Sub Multiply_1D_by1D()
Dim arr1 As Variant: arr1 = Array(1, 4, 3, 5, 10, 15, 13, 11, 6, 9)
Dim arr2 As Variant: arr2 = Array(2, 1, 4, 1, 2, 3, 2, 5, 2, 1)
With Application
Dim y As Long: y = UBound(arr1) + 1
Dim arr3 As Variant: arr3 = .Evaluate("TRANSPOSE(ROW(1:" & y & "))")
Dim arr4 As Variant: arr4 = .Index(.MMult(.Transpose(arr1), arr2), arr3, arr3)
End With
End Sub
这次我们不说了
指数
.MMult
估计
动态返回数组。因此,上面返回一个1D数组,如:
{2, 4, 12, 5, 20, 45, 26, 55, 12, 9}
将从上面的示例中返回2D数组,如下所示:
然后,因为我们基本上给
两个数组相似
{1,2,3,4,5,6,7,8,9,10}
,但以动态的方式,
将从该二维阵列中切片一个一维阵列:
以同样的方式,您可以使用
指数
只要使用有效的1D数组指定rows和columns参数。我希望这对任何人都有帮助。