我的工作簿中有几个图表(每个工作表一个),报告过去三周的数据。源数据是 ListObject 表中不连续的列。每周当表格更新新一周的数据(附加行)时,我希望图表更新。
这类似于 this post但我正在更新系列范围,而不是添加另一个系列。
以下是一些示例数据:
A B C D E F
Start End Green Yellow Red Total
------- ------- ------- ------- ------- -------
1/1/16 1/7/16 10 10 10 30
1/8/16 1/14/16 12 12 12 36
1/15/16 1/21/16 12 20 18 50
1/22/16 1/28/16 30 10 50 45
关于最简单的方法有什么建议吗?
系列公式最终如下所示:
=SERIES(Project!$A$2,Project!$C$1:$E$1,Project!$C$2:$E$2,1)
=SERIES(Project!$A$3,Project!$C$1:$E$1,Project!$C$3:$E$3,2)
=SERIES(Project!$A$4,Project!$C$1:$E$1,Project!$C$4:$E$4,3)
我正在考虑迭代 SeriesCollection 中的每个系列,解析出不同的逗号分隔值,并更新范围。像这样的事情:
set clnSeries = activechart.seriescollection
dim strSeriesTemp as string 'Placeholder for previous series formula
For i = clnSeries.count to 1 step -1
if strSeriesTemp = "" then
strSeriesTemp = clnSeries(i).formula
arrSeries = split(clnSeries(i).formula, ",")
for i = lbound(arrSeries) to ubound(arrSeries)
select case i
'Move legend label one row down
case 1: strFormula = arrSeries(i).offset(1,0).address
'Leave series labels the same
case 2: strFormula = strFormula & arrSeries(i)
'Move series values one row down
case 3: strFormula = strFormula & arrSeries(i).offset(1,0).address
'Set series index
case 4: strFormula = strFormula & i
end select
strFormula = "=SERIES(" & strFormula & ")"
else
clnSeries(i).formula = strFormula
end if
next i
最佳答案
我认为解决这个问题的最佳方法是使用动态命名范围。
在“名称管理器”的“公式”选项卡下创建以下三个命名范围:
Ultimate=OFFSET(Sheet1!$A$1,MATCH(MAX(Sheet1!$B:$B),Sheet1!$B:$B,0)-1,2,1,3)
Penultimate=OFFSET(Sheet1!$A$1,MATCH(MAX(Sheet1!$B:$B),Sheet1!$B:$B,0)-2,2,1,3)
Antepenultimate=OFFSET(Sheet1!$A$1,MATCH(MAX(Sheet1!$B:$B),Sheet1!$B:$B,0)-3,2,1,3)
然后右键单击图表,选择数据,将系列值编辑为:
=Sheet1!Antepenultimate
=Sheet1!Penultimate
=Sheet1!Ultimate
然后,每次您向列中添加新行时,假设输入按时间顺序排列,这三个范围将自动更新为最后三行。 (请注意,如果您返回查看Sheet1
,它将会更新为您的工作簿名称,因为它是一个名为范围的工作簿级别。)
解释:OFFSET
公式引用单元格 A1,然后向下查找 B 列,直到找到最新日期,并向下移动最新日期的行号,备份必要的行数,移动到右边两列,最后选择一个1x3的范围。
注意:为了使您的系列名称也正确更新,您还需要为它们创建命名范围。
提示:
UltimateName=OFFSET(Sheet1!$A$1,MATCH(MAX(Sheet1!$B:$B),Sheet1!$B:$B,0)-1,0)
关于VBA:更新图表以显示最后三个周期的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38707977/