Arrays 数组列上的VBA Sumproduct

Arrays 数组列上的VBA Sumproduct,arrays,excel,vba,Arrays,Excel,Vba,在Excel VBA中是否有方法使用Application.WorksheetFunction.Sumproduct获取两个数组列的Sumproduct?例如,如果A和B是两个数组,每个数组有3行3列(VBA数组,而不是Excel数组),是否有一种简单的方法可以获得A的第3列与B的第2列的乘积?如果是,语法是什么? 谢谢好的,好像工作表功能一样。索引也适用于数组的数组。因此,您可以通过组合WorksheetFunction.Index来获得第三列和第二列,以及WorksheetFunction.

在Excel VBA中是否有方法使用Application.WorksheetFunction.Sumproduct获取两个数组列的Sumproduct?例如,如果A和B是两个数组,每个数组有3行3列(VBA数组,而不是Excel数组),是否有一种简单的方法可以获得A的第3列与B的第2列的乘积?如果是,语法是什么?
谢谢

好的,好像工作表功能一样。索引也适用于数组的数组。因此,您可以通过组合WorksheetFunction.Index来获得第三列和第二列,以及WorksheetFunction.Transpose来获得列的1D数组,然后是WorksheetFunction.SumProduct来实现这一点

Sub test()

 aA = [{1,2, 3;4,5, 6;7,8, 9}]
 aB = [{10, 11,12;13, 14,15;16, 17,18}]

 'aA = Array(Array(1, 2, 3), Array(4, 5, 6), Array(7, 8, 9))
 'aB = Array(Array(10, 11, 12), Array(13, 14, 15), Array(16, 17, 18))

 aCol3of_aA = WorksheetFunction.Index(aA, 0, 3)
 aCol2of_aB = WorksheetFunction.Index(aB, 0, 2)

 aArr1 = WorksheetFunction.Transpose(aCol3of_aA)
 aArr2 = WorksheetFunction.Transpose(aCol2of_aB)

 dSumProduct = WorksheetFunction.SumProduct(aArr1, aArr2)
 '= 3*11 + 6*14 + 9*17 = 270

 MsgBox dSumProduct

End Sub

虽然尝试使用
WorksheetFunction.SumProduct
来实现这一点很有诱惑力,但在VBA数组上循环要比使用工作表函数快得多。在一个小测试中,我得到了一个x40的性能提升,超过了另一个发布的答案

这是一个简单的示例,说明了您可能如何做到这一点。您应该在输入和错误处理上添加有效性检查

Function ArraySumProduct(aA As Variant, aB As Variant, col1 As Long, col2 As Long) As Variant
    Dim i As Long
    Dim dSumProduct

    For i = LBound(aA) To UBound(aA)
        dSumProduct = dSumProduct + aA(i, col1) * aB(i, col2)
    Next
    ArraySumProduct = dSumProduct
End Function

什么是VBA阵列?数组还是真正的二维数组?请尝试将您的问题可视化,以便我们更好地理解您的问题