带循环的Sumproduct VBA

问题描述

我知道这个问题已经以某种形式被问到了恶心,但是我所有的谷歌搜索并没有引导我解决。我想在带有移动条件引用的VBA循环中使用Sumproduct。我知道Sumproduct在VBA中的工作原理与在电子表格中不同。我要复制的公式如下:

=Sumproduct([KNA_Amt]*--([KNA_Dt]=h$25)*--([KNA_Cat]=$b47)*--([KNA_Prgm]=$D$8))   

在工作表中,该行将被拖下6行并跨越12列。

在VBA中,我有以下代码,显然不起作用...

sub CalcualteSFA()
Dim r As Long
Dim c As Long


r = 87: c = 8
For for_col = 1 To 12
Cells(r,c) = WorksheetFunction.SumProduct([KNA_Amt]*--([KNA_Dt]=Cells(25,c))*--([KNA_Cat]=cells(r,2))*--([KNA_Prgm]=cells(8,4))
r=r+1
next
r=87
c=c+1
next
end sub

所以我知道编码不起作用,但是有人可以通过找出可以的代码来帮助我吗?

非常感谢!

解决方法

可以同时分配多个公式,并且将自动调整相对(无$)行/列的引用:

Sub CalcualteSFA()

    Dim r As Range
    Set r = [H87:S92]

    r.Formula = "=Sumproduct([KNA_Amt]*--([KNA_Dt]=h$25)*--([KNA_Cat]=$b47)*--([KNA_Prgm]=$D$8))"

    r.Value = r.Value  ' optional to convert the formulas to values

End Sub