【问题标题】:Entering a Formula using VBA in a Cell在单元格中使用 VBA 输入公式
【发布时间】:2021-08-05 16:49:14
【问题描述】:

我在电子表格中有一张表格,我每天都会刷新。工作表中的行数每天都在变化,我目前用于计算表中项目的公式不包括刷新后添加到我的表中的任何新数据行(如果有) .

我想创建一个宏来自动更新这些公式以包含表中的所有行。下面的代码是我的尝试。该代码在计算正确值方面工作得很好,但它没有在单元格中输入公式。它只是输入公式的结果。

如何更改代码以将公式输入单元格而不仅仅是值?

Sub formula_update()

ThisWorkbook.Activate
    Worksheets("Summary").Activate
        Range("F9").Select
        
        Do Until IsEmpty(Selection)
            ActiveCell.Formula = Application.CountIfs(Range(ActiveCell.Offset(3, 0), ActiveCell.Offset(3, 0).End(xlDown)), "<>0")
            ActiveCell.Offset(0, 1).Select
        Loop
        
End Sub

【问题讨论】:

  • 您需要输入一个公式(作为字符串):ActiveCell.Formula = "=COUNTIFS(...)"
  • 另见How to avoid using SelectActivateActiveCell 也应避免使用。
  • 如果您使用CTRL + T 将数据集格式化为表格,您可以命名范围,公式实际上会随着表格的大小而缩放,因此您可以完全避免使用 VBA。例如,=Counta( YourTable[ColumnA] )
  • @BigBen 你有没有一个例子可以分享如何在变化范围内做到这一点?我的桌子经常有行被添加/删除。公式不会自动更新以包含我添加的新行,因此我希望宏为我重新创建公式。如何将公式作为字符串输入并仍然捕获偏移量和 end(xldown) 为我做了什么?

标签: excel vba excel-formula


【解决方案1】:
Sub formula_update()

ThisWorkbook.Worksheets("Sheet4").Range("A3").Select
        
        Do Until IsEmpty(Selection)
            ActiveCell.Value = Application.CountIfs(Range(ActiveCell.Offset(3, 0), ActiveCell.Offset(3, 0).End(xlDown)), "<>0")
            ActiveCell.Offset(0, 1).Select
        Loop
        
End Sub

【讨论】:

  • 不幸的是,这并没有改变任何东西。它仍然只是将公式的值输入到单元格中,而不是公式本身。还有其他想法吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2015-01-09
相关资源
最近更新 更多