グラフの位置を設定する


TopとLeftをセルに合わせる

グラフの位置を設定するには、ChartObjectのTopプロパティとLeftプロパティを設定します。

Sub Sample()
    With ActiveSheet.ChartObjects("グラフ 1")
        .Top = Range("B7").Top
        .Left = Range("B7").Left
    End With
End Sub

一般的に、グラフの位置を何かに合わせるときは、座標を指定するよりも、どこのセルに合わせる・・・という使い方が多いです。上記のように、合わせたいセルのTopプロパティやLeftプロパティを、そのままChartObjectのプロパティに設定すると簡単です。

ちなみに、Excel 2010でマクロ記録すると

Sub Macro()
    ActiveSheet.ChartObjects("グラフ 1").Activate
    ActiveSheet.Shapes("グラフ 1").IncrementLeft -18.75
    ActiveSheet.Shapes("グラフ 1").IncrementTop -9.75
End Sub

こんなコードが記録されました。IncrementLeftとかは、今の位置から見て、左方向にどんんだけ移動する、っていう命令です。まぁ、行った操作は確かにその通りなんですけど、これが記録されてもねぇ・・・って感じです。ついでに、同じ操作をExcel 2003でマクロ記録してみましょうか。

Sub Macro()
    ActiveSheet.ChartObjects("グラフ 1").Activate
    ActiveChart.ChartArea.Select
    ActiveSheet.Shapes("グラフ 1").IncrementLeft -18.75
    ActiveSheet.Shapes("グラフ 1").IncrementTop -9.75
End Sub

似たようなものですね。

Excel 2003のコードは動くか

Excel 2003でマクロ記録した次のコードを、Excel 2007で実行してみます。
Sub Macro()
    ActiveSheet.ChartObjects("グラフ 1").Activate
    ActiveChart.ChartArea.Select
    ActiveSheet.Shapes("グラフ 1").IncrementLeft -18.75
    ActiveSheet.Shapes("グラフ 1").IncrementTop -9.75
End Sub

【Excel 2007での実行結果】

これは、普通に動きますね。ただ、IncrementLeftやIncrementTopなんてのは使わず、素直にTopプロパティとLeftプロパティを使った方がいいでしょう。