是否可以将需要应用于列的公式保存或应用于列标题或某种元数据,以便在向Excel表中添加新行时,公式可以应用于列?
场景:
我正在创建一个模板表,该表一开始没有行。在一个单独的工作表(或同一工作表)上,一旦用户选择了要在表中生成的行数,我就使用VBA动态地向表中添加行。
我的想法是,我可能在表格开始时没有任何行,或者用户可能手动删除了行。当我以编程方式添加新行时,我希望公式也应用于单元格。我使用的大多数公式是以下三种类型之一:
结构化表引用、SUM、AVERAGE等Excel函数和自定义函数名称。
更新日期:
以下是我的尝试:
1〉尝试将公式应用于页眉本身。结果:它自己的头改变了#REF!
错误。我认为行为是正确的。所以这是一个不去的选择。
2〉尝试创建一行,并将公式应用到该行。这很有效,但问题是,我不想以虚拟行开始。
3〉使用VBA代码向表中添加行
ActiveWorkbook.Worksheets("Sheet3").ListObjects("Table2").ListRows.Add AlwaysInsert:=True
在for循环中。新的行保留视觉样式表,但似乎不保留公式。只有空白单元格。
3条答案
按热度按时间velaa5lx1#
该公式是否位于标题单元格命令中?
然后用VBA为当前行添加公式:
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还是其他方法,在表格中添加一行,具有单列公式的列将自动转入新行。tkclm6bt3#
不确定表格模板或VBA,但可能有另一个选项,使用
=ARRAYFORMULA()
例如,假设您有一个标题行和3列,并希望最后一列是前两列的乘积。在单元格
C2
中,您可以输入以下内容:这有三个好处:
1.完全跳过第一行
1.有效地将公式应用于每一行,这在您以后决定插入一行(您的问题)时非常有用
1.只有一个位置可以修改每一行的公式
尽管如此,它可能不会立即清楚地显示单元格的计算方式/计算位置。(提示:
ctrl
+~
可能有帮助)