Выполнение Sumproduct без использования встроенной функции в Excel VBA

Я упростил свою проблему, чтобы задать этот вопрос. Представьте, что у меня есть следующие данные в Excel:

Денежные потоки | DiscountFactor

11,851 | 0,9901

96,401 | 0,9679

80 412 | 0,9494

Я хочу выполнить SUMPRODUCT на этих двух столбцах в VBA, но без использования встроенной функции 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 

Как получить код для вывода правильного ответа?

Чтобы дать некоторый контекст, я буду расширять это, работая для динамических массивов, и в конечном итоге я превращу его в определенную пользователем функцию.

Любая помощь приветствуется.

Основная проблема заключается в том, что вы хотите только один цикл и обратиться к одной и той же строке. Для этого вы должны использовать простой цикл for и использовать счетчик как индекс обоих массивов.

Нет причин загружать массивы с помощью цикла, так как вы можете напрямую назначать значения.

 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 
Давайте будем гением компьютера.