将列公式保存在表头中

时间:2014-09-09 11:46:55

标签: excel vba excel-vba

是否可以将我需要应用于列的公式保存或应用于列标题或某种元数据,以便在向Excel表中添加新行时,公式应用于列?

Scenarion:

我正在创建一个模板表,它最初没有行。 在用户选择要在表中生成的行数后,在单独的工作表(或相同的工作表)上,我使用VBA动态地向表中添加行。

我的想法是,我可能在开始时表中没有任何行,或者用户可能手动删除了行。 当我以编程方式添加新行时,我也希望在单元格上应用公式。我使用的大多数公式都是以下三种类型之一:

结构化表引用,Excel函数如SUM,AVERAGE等和自定义函数名称。

更新

以下是我的尝试:

1>尝试将公式应用于标题本身。 结果:标题自身随#REF!错误而变化。我认为这种行为是正确的。所以这是一个禁忌的选择。

2 - ;尝试创建一行并将公式应用于该行。这是有效的,但问题是,我不想开始使用虚拟行。

3>使用VBA代码使用

将行添加到表中
ActiveWorkbook.Worksheets("Sheet3").ListObjects("Table2").ListRows.Add AlwaysInsert:=True

在for循环中。 新行保留视觉样式表,但似乎不保留公式。只是空白细胞。

2 个答案:

答案 0 :(得分:0)

公式是否可以在标题单元格注释中?

enter image description here

然后用VBA添加当前行的公式:

Sub test()
    Dim headerCells As Range
    Set headerCells = Range("B2:E2")

    OnNewRow 3, headerCells
End Sub

Sub OnNewRow(newRow As Integer, headerCells As Range)
    Dim headerCell As Range, targetCell As Range, formulaFromComment As String
    For Each headerCell In headerCells
        formulaFromComment = GetFormulaFromComment(headerCell)
        If (formulaFromComment = "") Then _
            GoTo NextHeaderCell
        Set targetCell = Intersect(headerCells.Worksheet.Rows(newRow), _
                                   headerCell.EntireColumn)
        AddFormula newRow, targetCell, formulaFromComment
NextHeaderCell:
    Next
End Sub

Sub AddFormula( _
    newRow As Integer, _
    targetCell As Range, _
    formula As String)

    formula = Replace(formula, "{ROW}", newRow)
    targetCell.formula = formula
End Sub

Function GetFormulaFromComment(headerCells As Range) As String
    ' TODO
    GetFormulaFromComment = "=SUM($C${ROW}:$E${ROW})"
End Function

答案 1 :(得分:0)

不确定表模板或VBA,但使用=ARRAYFORMULA()

可能还有其他选项

例如,假设您有一个标题行和3列,并希望您的最后一列成为前两列的产品。在单元格C2中,您可以输入以下内容:

=ARRAYFORMULA(A2:A*B2:B)

这有三个好处:

  1. 完全跳过第一行
  2. 有效地将公式应用于每一行,如果您以后决定插入一行(您的问题),则该行有用
  3. 只有一个位置可以修改每一行的公式
  4. 虽然,计算细胞的方式/位置可能并不明显。 (提示:ctrl + ~可能有帮助)