グラフのデータ範囲 変更
VBAを使って既存のグラフのデータ範囲を変更する方法です。
エクセル上だと[グラフ右クリック]→[データの選択(E)...]→から各項目を編集していく・・・と同じ動作を再現します。
関数、メソッドなど
ChartオブジェクトのSeriesCollectionメソッドを使用します。SetSourceDataメソッドを使用したりなど複数のやり方があるみたいですが
エクセル上でグラフの部分をクリックした際に数式バーに表示されるSERIES関数の値を変更するのが楽だと思います。
ChartObjects.Chart.SeriesCollection.FormulaR1C1"=SERIES()"
もしくは
ChartObjects.Chart.SeriesCollection.Formula"=SERIES()"
SERIES関数内は
SERIES(凡例項目,横軸ラベル,値,順番) となっています。
値と順番は必須です。
順番はグラフのプロットの番号で1から順に自動的に割り当てられています。
サンプルコード
○FormulaR1C1の場合Sub gra() 'アクティブシートのグラフ(1) With ActiveSheet.ChartObjects(1) 'プロット(1)のSERIESを変更 .Chart.SeriesCollection(1).FormulaR1C1 = "=SERIES(g!R1C2,g!R2C1:R5C1,g!R2C2:R5C2,1)" End With End Sub
○Formulaの場合
Sub gra() 'アクティブシートのグラフ(1) With ActiveSheet.ChartObjects(1) 'プロット(1)のSERIESを変更 .Chart.SeriesCollection(1).Formula = "=SERIES(g!$B$1,g!$A$2:$A$5,g!$B$2:$B$5,1)" End With End Sub
解説
上記サンプルでは元のグラフに1月部分を追加しています。どちらのサンプルでも同じ結果になります。
FormulaR1C1形式の方が列を変数として扱いやすいので便利な気がします。
サンプルコード 2
Sub test() Dim c As Long, r As Long r = 5 '行 c = 2 '列 With ActiveSheet.ChartObjects(1) .Chart.SeriesCollection(1).FormulaR1C1 = _ "=SERIES(g!R1C2,g!R2C1:R5C1,g!R2C2:R" & r & "C" & c & ",1)" End With End Sub