我在 Excel 中的工作表中制作了一个图表。在工作表中,图表引用工作表中要显示的特定单元格(即包含我的数据点的单元格)。
我想知道如何将图表复制到 Excel 文件中的另一个工作表中,并更新引用以引用新工作表中的单元格地址。
每当您复制粘贴/移动一个图表到另一张工作表中时,该图表仍将引用其所在的原始工作表中的单元格。这是因为,无论何时引用图表中的单元格,它都明确引用了它所在的工作表(即,不是说$T$7:$T$12
,而是引用SHEET'!$T$7:$T$12
)。
在图表中的参考文献中,如果我将参考文献从 更改SHEET'!$T$7:$T$12
为$T$7:$T$12
(甚至T7:T12
),我会收到一条消息,提示我的公式包含错误。
我该如何解决这个问题?
谢谢。
答案1
处理此问题最简单的方法是复制包含数据和图表的整个工作表,然后将新数据粘贴到复制的工作表中。这是一个非常简单的协议,虽然很耗时,但我的教程中有更多描述将图表复制到新工作表并链接到新工作表上的数据。
另一种方法是将图表复制到新工作表,使用 VBA 程序修改复制图表中的系列公式,用新工作表的名称替换旧工作表的名称。VBA 基本上是这样的:
Sub FindReplaceSeriesFormula(myChart As Chart, OldText As String, NewText As String)
Dim srs As Series
For Each srs In myChart.SeriesCollection
srs.Formula = Replace(srs.Formula, OldText, NewText)
Next
End Sub
你可以这样调用它:
Sub FixActiveChart()
FindReplaceSeriesFormula ActiveChart, "Sheet1", "Sheet2"
End Sub
我在我的教程中讨论了这种方法并提供了一些更可靠的代码改变系列公式——改进例程
答案2
以下是我的“Excel 入门”方法。更改源工作表的名称,使其与目标选项卡的最后一个字符不同(例如,“工作表 2”的图表和数据将被复制到“工作表 1”中)将您的图表和来源等放在源工作表的顶部,比如第 1 行到第 40 行。在目标工作表中留出类似的空间(我们假设此工作表上已经有其他项目)。选择行,然后复制并粘贴。这不会与锁定的单元格引用冲突。
在目标工作表中编辑图表的源数据,这现在很容易,因为您只需更改工作表名称中的一个字符,其他所有内容都会匹配。现在应该可以将整个选择剪切并粘贴到工作表内的其他位置。这听起来可能有很多步骤,但它相当快速、容易和可靠,因为您可以用简单的方式控制正在发生的事情。
如果我们剪切并粘贴图表和数据,那么它会自动移动引用,不会有任何麻烦,在这种情况下,如果我们想保留它,我们可能希望首先复制源选项卡。
答案3
如果您有很多图表,我会修改代码以适应情况:
Sub FindReplaceSeriesFormula(myChart As ChartObject, oldText As String, newText As String)
Dim srs As Series
For Each srs In myChart.Chart.SeriesCollection
srs.Formula = Replace(srs.Formula, oldText, newText)
Next
End Sub
Sub FixAllCharts()
Dim grph As ChartObject
Dim oldText As String, newText As String
oldText = "SheetOld"
newText = "SheetNew"
For Each grph In ActiveSheet.ChartObjects
FindReplaceSeriesFormula grph, oldText, newText
Next grph
End Sub