【问题标题】:Make vba excel function dynamic with the reference cells使用参考单元格使 vba excel 函数动态化
【发布时间】:2017-06-20 21:09:20
【问题描述】:

我编写了一个创建两个范围的 sumproduct 的代码....但是我希望最终答案在计算 sumproduct 的参考范围发生变化时改变

p = 1
For p = 1 To 12
ActiveSheet.Cells(LastRow + 2, 31 + p).Formula = WorksheetFunction.SumProduct(Range(Cells(3, 31 + p), Cells(LastRow, 31 + p)), Range(Cells(3, 6 + p), Cells(LastRow, 6 + p)))
Next p

例如,在上面的表格中,sumproduct 结果显示在 lastrow+2 th 行和第 31 列到第 42 列中,但是当我更改参考单元格时,答案不会改变 如何通过输入使我的最终结果动态化

【问题讨论】:

  • 对于.Formula,您需要添加一个公式,就像您将其手动添加到 Excel 单元格中一样,如.Formula("=SumProduct(…)"),以便 Excel 自动重新计算公式。要获取范围的地址并在公式中使用它,请使用 Range.Address method
  • 我们如何循环使用这种表示形式。请帮助我。
  • 填写p = 1 的公式,例如Cells(LastRow + 2, 32).Formula = "…",然后将该单元格复制到其他单元格中是一种简单的方法,因此不需要循环:Cells(LastRow + 2, 32).AutoFill Destination:=Range(Cells(LastRow + 2, 32), Cells(LastRow + 2, 43))

标签: vba excel excel-formula


【解决方案1】:

使用.Formula,您需要添加一个公式,就像手动将其添加到.Formula("=SumProduct(…)") 这样的Excel 单元格中,这样Excel 会自动重新计算公式。要获取范围的地址并在公式中使用它,请使用 Range.Address method


只需填写第一个单元格的公式p = 1

ActiveSheet.Cells(LastRow + 2, 32).Formula = "=SumProduct(" & Range(Cells(3, 32), Cells(LastRow, 32)).Address(False, False) & ", " & Range(Cells(3, 7), Cells(LastRow, 7)).Address(False, False) & ")"

然后将该单元格自动填充到其他单元格中(最多 p = 12

ActiveSheet.Cells(LastRow + 2, 32).AutoFill Destination:=Range(Cells(LastRow + 2, 32), Cells(LastRow + 2, 43))

之后,如果您更改任何值,总和会自动重新计算。

【讨论】:

  • 感谢您投入宝贵的时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 2018-09-18
  • 2020-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多