エクセル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