グラフの大きさを設定する


WidthとHeightでしょ

グラフの大きさを設定するには、ChartObjectのWidthプロパティとHeightプロパティを設定します。

Sub Sample()
    With Range("B7:E15")
        ActiveSheet.ChartObjects("グラフ 1").Width = .Width
        ActiveSheet.ChartObjects("グラフ 1").Height = .Height
    End With
End Sub

グラフの大きさは、WidthプロパティとHeightプロパティに数値を指定すればいいのですが、こちらも位置と同じように、数値で指定するというよりも、セル範囲どこどこにピタリと合わせるとか、別のグラフと同じ大きさに揃えるとか、そういう使い方の方が多いです。上記のマクロは、セル範囲B7:E15に合わせています。いずれにしても、WidthプロパティとHeightプロパティでしょう。

さて、Excel 2010でマクロ記録してみましょう。

Sub Macro()
    ActiveSheet.ChartObjects("グラフ 1").Activate
    ActiveSheet.Shapes("グラフ 1").ScaleWidth 0.8971965887, msoFalse, _
        msoScaleFromTopLeft
    ActiveSheet.Shapes("グラフ 1").ScaleHeight 0.8804347826, msoFalse, _
        msoScaleFromTopLeft
End Sub

ScaleWidthメソッドとは、ヘルプによると

指定された倍率で図形の幅を拡大または縮小します

だそうです。まぁ、確かにグラフの大きさを変更しましたから、見方によっては「大きさを拡大縮小した」とも言えますけどね。まぁ、いいです。このへんのマクロ記録には期待してませんから。Excel 2003でマクロ記録すると、次のようなコードが生成されます。

Sub Macro()
    ActiveSheet.ChartObjects("グラフ 1").Activate
    ActiveChart.ChartArea.Select
    ActiveSheet.Shapes("グラフ 1").ScaleWidth 0.9, msoFalse, msoScaleFromTopLeft
    ActiveSheet.Shapes("グラフ 1").ScaleHeight 0.87, msoFalse, msoScaleFromTopLeft
End Sub

へぇ、Excel 2007では長いコードが、行継続文字で分割されて記録されるようになったんですね。へぇ・・・

Excel 2003のコードは動くか

Excel 2003でマクロ記録した次のコードを、Excel 2007で実行してみます。

Sub Macro()
    ActiveSheet.ChartObjects("グラフ 1").Activate
    ActiveChart.ChartArea.Select
    ActiveSheet.Shapes("グラフ 1").ScaleWidth 0.9, msoFalse, msoScaleFromTopLeft
    ActiveSheet.Shapes("グラフ 1").ScaleHeight 0.87, msoFalse, msoScaleFromTopLeft
End Sub

【Excel 2007での実行結果】

これも、普通に動きます。誰もこんなことしないでしょうけどね。あ、もちろん、WidthプロパティやHeightプロパティは、どちらも同じコードで動きます。