バージョン2010の場合について。
「グラフエリアの書式設定」の「サイズ」は、グラフの全体のサイズを表示・指定しているらしい。VBAでいうと、
ActiveSheet.Shapes("グラフ 1").Height ActiveSheet.Shapes("グラフ 1").Width
を表示・指定している。この「グラフ 1」はActiveSheet上のShapeオブジェクトで、そのShapeオブジェクトの高さと幅とを参照している。
ちなみに、ここで示されるサイズは、ワークシート上に埋め込みグラフを作るときにChartオブジェクトを入れるコンテナであるChartObjectオブジェクトのサイズと同じである。
「グラフ 1」というShapeオブジェクトは、その中にグラフ本体(?)である Chart オブジェクトを含んでいる。
このChartオブジェクトには、サイズがない。サイズはChartオブジェクトの中にあるChartAreaオブジェクトで指定する。
つまり、ワークシート内の図形要素であるShapeオブジェクトの中に、グラフの図形要素であるChartAreaオブジェクトが入っているようなイメージだと思う。
で、グラフ本体である ChartAreaオブジェクトは、Shapeオブジェクトよりも縦横が5ポイントずつ小さい。
言い換えると、ChartAreaオブジェクトの周囲には、2.5ポイント幅でマージンが入っている。
例えば、「グラフエリアの書式設定」でサイズを高さ:2.54cm、幅:2.54cm(つまり縦横72ポイント)に指定すると、ChartAreaのサイズは、高さ:約2.36cm、幅:約2.36cm(つまり縦横67ポイント)になる。
Shapeオブジェクトの大きさを変更すると、ChartAreaオブジェクトのサイズも変更される。これに伴ってグラフ内の要素のサイズも変更される。逆も然りで、ChartAreaのサイズを変更すると、Shapeオブジェクトの、従って、ChartObjectオブジェクトのサイズも5ポイント分のマージンを付けて変更される。
ただし、サイズに関係なくマージンは5ポイントのままなので、例えば「グラフエリアの書式設定」の「サイズ」を半分にしてもグラフの表示サイズは半分にはならない。
つまり、「書式設定」で計算したサイズバランスと、表示されるグラフのサイズバランスとには、ずれがあることになる。
「書式設定」で指定するサイズはあくまでこの図形要素全体の大きさだということに留意する必要がある。
ChartAreaの中には、グラフの核心であるPlotAreaがあり、そのサイズと位置はChartAreaのサイズとグラフのレイアウトで決まっている。ただしこれはChartAreaのサイズとは比較的に独立に操作可能である。
Sub ChartAreaSizeTest() 'グラフエリア(ChartArea)のサイズを設定するサンプルマクロ Dim height As String, width As String height = ActiveChart.ChartArea.height width = ActiveChart.ChartArea.width MsgBox ("ChartAreaのサイズをpt単位で変更します。(2.54cm = 72pt)") height = InputBox("元の高さ=" + Str(height) + "pt. 新しい高さは?") width = InputBox("元の幅=" + Str(width) + "pt. 新しい幅は?") ActiveChart.ChartArea.height = cDbl(height) ActiveChart.ChartArea.width = cDbl(width) End Sub
Sub PlotAreaSizeTest() 'プロットエリアのサイズを設定するサンプルマクロ Dim height As String, width As String height = ActiveChart.PlotArea.height width = ActiveChart.PlotArea.width MsgBox ("PlotAreaのサイズをpt単位で変更します。(2.54cm = 72pt)") height = InputBox("元の高さ=" + Str(height) + "pt. 新しい高さは?") width = InputBox("元の幅=" + Str(width) + "pt. 新しい幅は?") ActiveChart.PlotArea.height = cDbl(height) ActiveChart.PlotArea.width = cDbl(width) End Sub
Sub PlotAreaLocationTest() 'プロットエリアの位置を設定するサンプルマクロ Dim Top As String, Left As String Top = ActiveChart.PlotArea.Top Left = ActiveChart.PlotArea.Left MsgBox ("PlotAreaのサイズをpt単位で変更します。(2.54cm = 72pt)") Top = InputBox("元の上からの位置=" + Str(Top) + "pt. 新しい位置は?") Left = InputBox("元の左からの位置=" + Str(Left) + "pt. 新しい位置は?") ActiveChart.PlotArea.Top = cDbl(Top) ActiveChart.PlotArea.Left = cDbl(Left) End Sub