VBA グラフ範囲の変更



グラフのデータ範囲 変更


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

関連・類似ページ