最後の3週間のデータを報告するワークブック(ワークシートごとに1つ)にいくつかのグラフがあります。ソースデータは、ListObjectテーブルの非連続列です。新しい週のデータ(追加の行)でテーブルが更新される毎週、私はチャートを更新したい。VBA:データを3つの期間の最後に更新する
これは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
おかげ@Alexis、これは便利です。私はListObjectテーブルを使用しています。各シートにはそれぞれのテーブルの下に存在するデータがありますので、列全体の最大値を求めることは実用的ではありません。私はテーブルから最大値を選択するコードを変更しようとしています。もう一つの課題は、約30枚の名前付き範囲を効率的に作成する必要があるため、これを行う必要がある場所は約10枚ですが、これまではVBAコードを作成するよりも簡単です。 – MJA
あなたは$ B:$ Bを、検索したいあなたの限定された範囲に置き換えてください。 –
私の数式はより複雑に見えます: = OFFSET(tblMCC、MATCH(MAX(tblMCC [開始])、tblMCC [開始]、1)-3、MATCH( "グリーン"、tblMCC [#ヘッダー]、0)、3 、1) VBAで名前付き範囲を作成しようとすると、拒否され続けます。 – MJA