【VBA】エクセルのグラフ位置を変更する

エクセルVBAでよく使うコードの備忘録。エクセルワークシートのグラフのサイズを変更するコード。セルの位置に合わせるようにグラフを移動させたり、微修正したりする方法について。

スポンサーリンク

ChartObjectのTop・Leftプロパティ

エクセルのシート上にあるグラフはChartObjectにアクセスすることで取得できます。WorksheetオブジェクトのChartObjectsにグラフの名前を引数として与えてやれば、ChartObjectにアクセスできます(グラフの名前を確認する方法についてはこちらを参照)。

グラフのサイズを設定するには、ChartオブジェクトのTop・Leftプロパティを利用すると便利です。Top・Leftプロパティではグラフの上端・左端の位置をワークシートの上側・左側からの距離として指定することができます。

サンプルコード

(カッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください)

下記のサンプルコードでは、ChartObjectのTop・Leftプロパティの値に直接値を設定してグラフの位置を操作しています。

グラフ位置の変更(値を直接設定)

Public Sub MoveChart1()

    '--- グラフがあるシート名 ---'
    Dim wsName As String
    wsName = "[ワークシート名]"
    
    '--- ChatObjectの名前 ---'
    Dim chartName As String
    chartName = "[グラフ名]"
    
    '--- ChartObject ---'
    Dim chartObj As Object
    Set chartObj = ThisWorkbook.Worksheets(wsName).ChartObjects(chartName)
    
    '--- グラフの位置を変更 ---'
    chartObj.Top = [上端の位置]
    chartObj.Left = [下端の位置]
    
End Sub

上記のサンプルコードだと、ワークシート上で行や列の幅を変更した場合、グラフの相対的な位置が変わってしまいます。このような問題を避けるため、ChartObjectのTop・Leftプロパティの値にRangeオブジェクトのTop・Leftプロパティを設定して、セルの位置にグラフを合わせるようにすることも可能です。セルの位置から微修正したい場合は、そこからの変化幅を別途追加してやればOKです。

グラフ位置の変更(セルに合わせる)

Public Sub MoveChart1()

    '--- グラフがあるシート名 ---'
    Dim wsName As String
    wsName = "[ワークシート名]"
    
    '--- ChatObjectの名前 ---'
    Dim chartName As String
    chartName = "[グラフ名]"
    
    '--- ChartObject ---'
    Dim chartObj As Object
    Set chartObj = ThisWorkbook.Worksheets(wsName).ChartObjects(chartName)

    '--- グラフを合わせるセルのアドレス ---'
    Dim cellAddress as String
    cellAddress = "[セルのアドレス(A1など)]"
    
    '--- グラフの位置を変更 ---'
    chartObj.Top = ThisWorkbook.Worksheets(wsName).Range(cellAddress).Top
    chartObj.Left = ThisWorkbook.Worksheets(wsName).Range(cellAddress).Left
    
End Sub