エクセルVBAでよく使うコードの備忘録。エクセルワークシートのグラフのサイズを変更するコード。直接サイズを指定したり、倍率を指定して大きさを変更する方法について。
ChartObjectのHeight・Widthプロパティ
エクセルのシート上にあるグラフはChartObjectにアクセスすることで取得できます。WorksheetオブジェクトのChartObjectsにグラフの名前を引数として与えてやれば、ChartObjectにアクセスできます(グラフの名前を確認する方法についてはこちらを参照)。
グラフのサイズを設定するには、ChartオブジェクトのHeight・Widthプロパティを利用すると便利です。Height・Widthプロパティではグラフの縦・横のサイズを直接指定することができます。
サンプルコード
(カッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください)
下記のサンプルコードでは、ChartObjectに直接幅と高さを設定してサイズを調整しています。一番直感的な指定方法です。
グラフサイズの変更(幅・高さ指定)
Public Sub ChangeChartSize1()
'--- グラフがあるシート名 ---'
Dim wsName As String
wsName = "[ワークシート名]"
'--- ChatObjectの名前 ---'
Dim chartName As String
chartName = "[グラフ名]"
'--- ChartObject ---'
Dim chartObj As Object
Set chartObj = ThisWorkbook.Worksheets(wsName).ChartObjects(chartName)
'--- ChartObjectに縦・横のサイズを設定 ---'
ThisWorkbook.Worksheets(wsName).ChartObjects(chartName).Height = [縦サイズ]
ThisWorkbook.Worksheets(wsName).ChartObjects(chartName).Width = [横サイズ]
End Sub
直接サイズを指定するのではなく、倍率で変更したい場合は下記のようにします。やっていることはHeight・Widthプロパティに値を設定するという同じことですが、元のサイズに掛け目をかけてスケーリングしています。
グラフサイズの変更(倍率指定)
Public Sub ChangeChartSize2()
'--- グラフがあるシート名 ---'
Dim wsName As String
wsName = "[ワークシート名]"
'--- ChatObjectの名前 ---'
Dim chartName As String
chartName = "[グラフ名]"
'--- ChartObject ---'
Dim chartObj As Object
Set chartObj = ThisWorkbook.Worksheets(wsName).ChartObjects(chartName)
'--- 倍率 ---'
Dim scaleFactor As String
scaleFactor = [倍率]
'--- ChartObjectに縦・横のサイズを設定 ---'
chartObj.Height = scaleFactor * chartObj.Height
chartObj.Width = scaleFactor * chartObj.Width
End Sub