从下图可以看出我的文档结构。我希望从 A 列(不包括单元格 A1,不包括此特定单元格的图表)、B 和 D 列构建时间线图表。我正在寻找通过使用 VBA 使图表动态化的方法,以便新的用户添加的事件将自动显示在图表中,无需手动更改图表的范围。
该范围不必立即/连续更改——只要它在单击“创建新事件视图”按钮后面的宏时发生更改。当用户有更多事件要添加到表中时,她只需将事件添加到表中,通过创建一个新表并删除旧表,她也会有一个更新的图表。
问题是,如何做到这一点?
您不需要 VBA 来使图表动态化。只需创建随数据增长和缩小的动态命名范围。图表的 VBA 可以引用该命名范围,而不会增加代码负担。但是您甚至可能根本不需要 VBA。使用动态范围定义的图表将立即更新。无需代码。
图表标签的范围名称和公式:
chtLabels =Events!A2:Index(Events!$A:$A,counta(Events!$A:$A))
B 列的范围名称和公式
chtBegin =offset(chtlabels,0,1)
D 列的范围和公式
chtDuration =offest(chtlabels,0,3)
编辑数据源,而不是固定单元格范围,输入格式的命名范围
=Events!*RangeName*
您需要为系列值和图表的类别轴提供相应的范围名称。
注意:当您提供动态范围名称作为图表的来源时,您必须在范围名称引用中包含文件名或工作表名称。当您关闭并重新打开对话框时,您会发现 Excel 会自动将您输入的格式转换为[Filename]RangeName
注意 2:有许多不同的公式选项可以创建动态范围名称。在这种情况下,我们使用列 A 的索引,并通过计算单元格来确定最后填充的单元格。这仅在 A 列中的所有单元格都有文本时才有效。如果您的数据在 A 列中有间隙(我认为您没有),则可以应用不同的公式来确定范围。
Ctrl+L
。这会将您的范围转换为表格然后,您可以对其进行格式化并右键单击它并插入图表。这将允许您添加行或列。甚至添加会自动为您填写的公式列。您现在还可以设置使用引用此行的动态范围的公式,按列的名称调用列。使用标题/数据。获取小计。它将提供很大的灵活性。