我在工作簿中有几个图表(每个工作表一个)报告过去三周的数据。源数据是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中迭代每个Series,解析出不同的逗号分隔值,并更新范围。像这样:
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
答案 0 :(得分:2)
我认为解决此问题的最佳方法是使用动态命名范围。
在“公式”选项卡下的“名称管理器”中创建以下三个命名范围:
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
将更新为您的工作簿名称,因为它是一个名为range的工作簿级别。)
说明:OFFSET
公式引用单元格A1,然后向下查看列B,直到它找到最新日期并向下移动最新日期的行号,备份所需的行数,轮班向右两列,最后选择1x3范围。
注意:为了使您的系列名称也能正确更新,您还需要为它们制作命名范围。
提示:
UltimateName=OFFSET(Sheet1!$A$1,MATCH(MAX(Sheet1!$B:$B),Sheet1!$B:$B,0)-1,0)