excel 在表格标题中保留列公式

hgb9j2n6  于 2022-11-26  发布在  其他
关注(0)|答案(3)|浏览(144)

是否可以将需要应用于列的公式保存或应用于列标题或某种元数据,以便在向Excel表中添加新行时,公式可以应用于列?
场景:
我正在创建一个模板表,该表一开始没有行。在一个单独的工作表(或同一工作表)上,一旦用户选择了要在表中生成的行数,我就使用VBA动态地向表中添加行。
我的想法是,我可能在表格开始时没有任何行,或者用户可能手动删除了行。当我以编程方式添加新行时,我希望公式也应用于单元格。我使用的大多数公式是以下三种类型之一:
结构化表引用、SUM、AVERAGE等Excel函数和自定义函数名称。

更新日期:

以下是我的尝试:
1〉尝试将公式应用于页眉本身。结果:它自己的头改变了#REF!错误。我认为行为是正确的。所以这是一个不去的选择。
2〉尝试创建一行,并将公式应用到该行。这很有效,但问题是,我不想以虚拟行开始。
3〉使用VBA代码向表中添加行

ActiveWorkbook.Worksheets("Sheet3").ListObjects("Table2").ListRows.Add AlwaysInsert:=True

在for循环中。新的行保留视觉样式表,但似乎不保留公式。只有空白单元格。

velaa5lx

velaa5lx1#

该公式是否位于标题单元格命令中?

然后用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
von4xj4u

von4xj4u2#

只是用表。
如果突出显示单元格并从功能区中选择“插入表格”,它不仅会为您提供格式设置和筛选器。如果构建方法正确,它还会为每个 * 列 * 存储一次列公式,而不是为每个单元格存储一次。此外,公式的可读性更强!
对于公式,如果您希望它是单列公式,则不能使用单元格地址,除非它们是绝对的。(例如$A$1,而不是A1。)相反,您可以对整列使用[ColumnTitle](其中“ColumnTitle”是该列的实际标题),[@ColumnTitle]表示同一行中的列值。因此,如果“Cost”是列B的标题,“RunningTotal”是列C的标题,因此C6的公式为=B6+C5,您可以使用公式=[@Cost]+OFFSET([@RunningTotal],-1,0)],该公式更长,但更易于阅读/维护/调试,如果更改列标题,则公式也会更改!不需要VBA。鉴于此,再加上能够一次更改整个列的列,另外还可以引用其他表中的其他列,而不必担心单元格地址(例如MAX(Table1[Cost])),加上能够很容易地设置表的样式,加上与Power-Query的集成,以及VBA支持。(请参阅learn.microsoft.com。)无论是VBA还是其他方法,在表格中添加一行,具有单列公式的列将自动转入新行。

tkclm6bt

tkclm6bt3#

不确定表格模板或VBA,但可能有另一个选项,使用=ARRAYFORMULA()
例如,假设您有一个标题行和3列,并希望最后一列是前两列的乘积。在单元格C2中,您可以输入以下内容:

=ARRAYFORMULA(A2:A*B2:B)

这有个好处:
1.完全跳过第一行
1.有效地将公式应用于每一行,这在您以后决定插入一行(您的问题)时非常有用
1.只有一个位置可以修改每一行的公式
尽管如此,它可能不会立即清楚地显示单元格的计算方式/计算位置。(提示:ctrl + ~可能有帮助)

相关问题