执行Sumproduct而不使用Excel VBA中的内置函数

为了提出这个问题,我简化了我的问题。 想象一下,我在Excel中有以下数据:

现金stream| DiscountFactor

11,851 | 0.9901

96,401 | 0.9679

80,412 | 0.9494

我想对VBA中的这两列执行SUMPRODUCT,但不使用内置的SUMPRODUCT函数。 这是因为我的项目将会变得比这更复杂 – 但我只需要首先弄清楚这一点。 我的代码到目前为止:

Sub DiscountedCashflows() Dim CashFlows(1 To 3) As Variant Dim DiscountFactors(1 To 3) As Variant Dim CashFlowsElms 'Elements in the cashflow array Dim DiscountFactorElms 'Elements in the DiscountFactors array Sheet1.Select 'Populating Cashflows array Dim Counter1 As Long For Counter1 = LBound(CashFlows) To UBound(CashFlows) CashFlows(Counter1) = Range("A1").Offset(Counter1, 0).Value Next Counter1 'Populating DiscountFactors array Dim Counter2 As Long For Counter2 = LBound(DiscountFactors) To UBound(DiscountFactors) DiscountFactors(Counter2) = Range("B1").Offset(Counter2, 0).Value Next Counter2 'Loop through the elements in the first array For Each CashFlowsElms In CashFlows 'Loop through the elements in the second array For Each DiscountFactorElms In DiscountFactors x = x + 1 'Multiply the two array elements together Cells(x, 1) = CashFlowElms * DiscountFactorElms Next DiscountFactorElms Next CashFlowsElms MsgBox "Answer is..." Erase CashFlows Erase DiscountFactors End Sub 

如何获得输出正确答案的代码?

为了给出一些上下文,我将扩展这个dynamic数组,最终将它变成一个用户定义的函数。

任何帮助表示赞赏。

主要的问题是你只想循环一次并引用同一行。 要做到这一点,你会使用一个简单的循环,并使用计数器作为两个数组的索引。

没有理由使用循环加载数组,因为您可以直接赋值。

 Sub DiscountedCashflows() Dim CashFlows() As Variant Dim DiscountFactors() As Variant Dim i As Long Dim temp As Double With Worksheets("Sheet16") 'Populating Cashflows array CashFlows = .Range("A2:A4").Value 'Populating DiscountFactors array DiscountFactors = .Range("B2:B4").Value 'Loop through the elements in the first array For i = LBound(CashFlows, 1) To UBound(CashFlows, 1) temp = temp + (CashFlows(i, 1) * DiscountFactors(i, 1)) Next i End With MsgBox "Answer is..." & temp End Sub 
 Function MySumProduct() As Double Dim CashFlows As Variant Dim DiscountFactors As Variant With Sheet1 CashFlows = Application.Transpose(.Range("A1", .Range("A1").End(xlDown)).Value) DiscountFactors = Application.Transpose(.Range("B1", .Range("B1").End(xlDown)).Value) End With For i = LBound(CashFlows) to UBound(CashFlows) MySumProduct= MySumProduct + CashFlow(i) * DiscountFactor(i) Next i End Function