【问题标题】:Sumproduct VBA with LoopSumproduct VBA 与循环
【发布时间】:2020-09-01 22:12:12
【问题描述】:

我知道有人以某种形式提出过这个问题,但我所有的谷歌搜索都没有让我找到解决方案。我想在带有移动标准引用的 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

所以我知道编码不起作用,但有人可以帮我找出一个可以解决的代码吗?

非常感谢!

【问题讨论】:

  • 看起来 SUMIFS 在这里会做得更好。
  • 嗨@ScottCraner——我试过Sumifs,但问题是Amt数据跨越了不同的列。我认为 Sumifs 只喜欢引用一列,对吗?还是我弄错了?

标签: excel vba loops sumproduct


【解决方案1】:

可以同时赋值多个公式,自动调整相对(不带$)行/列引用:

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

【讨论】:

  • @Slai...这会将公式插入单元格还是公式的值?我不想显示公式。
  • @Slai--我试过这个,我得到一个应用程序定义或对象定义的错误消息。
  • @AubreyDubberke 两者都会做 - 它会首先设置公式,然后使用公式的结果值设置单元格。我猜这个错误与公式有关,因为当我用一个简单的公式测试它时它对我有用。您可以尝试在H87 中手动设置公式,看看是否有错误。
  • @Slai--所以,我知道公式可以在工作表的单元格中使用。我正在努力解决的是 VBA 中的函数性能。
猜你喜欢
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
相关资源
最近更新 更多