是否可以将我需要应用于列的公式保存或应用于列标题或某种元数据,以便在向Excel表中添加新行时,公式应用于列?
Scenarion:
我正在创建一个模板表,它最初没有行。 在用户选择要在表中生成的行数后,在单独的工作表(或相同的工作表)上,我使用VBA动态地向表中添加行。
我的想法是,我可能在开始时表中没有任何行,或者用户可能手动删除了行。 当我以编程方式添加新行时,我也希望在单元格上应用公式。我使用的大多数公式都是以下三种类型之一:
结构化表引用,Excel函数如SUM,AVERAGE等和自定义函数名称。
以下是我的尝试:
1>尝试将公式应用于标题本身。
结果:标题自身随#REF!
错误而变化。我认为这种行为是正确的。所以这是一个禁忌的选择。
2 - ;尝试创建一行并将公式应用于该行。这是有效的,但问题是,我不想开始使用虚拟行。
3>使用VBA代码使用
将行添加到表中ActiveWorkbook.Worksheets("Sheet3").ListObjects("Table2").ListRows.Add AlwaysInsert:=True
在for循环中。 新行保留视觉样式表,但似乎不保留公式。只是空白细胞。
答案 0 :(得分:0)
公式是否可以在标题单元格注释中?
然后用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)
这有三个好处:
虽然,计算细胞的方式/位置可能并不明显。 (提示:ctrl
+ ~
可能有帮助)