「EXCEL グラフ マクロ 位置 セルに合わせる」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスが時折あります。
アクティブなグラフを特定のセル位置に移動するサンプルマクロ
埋め込みグラフを1つ選択しておいてから以下のExcelマクロを実行してください。
Dim cho As ChartObject
Set cho = ActiveChart.Parent
cho.Top = Range("B2").Top
cho.Left = Range("B2").Left
End Sub
選択していたアクティブなグラフの左上の位置が、B2セルの左上に移動します。
埋め込みグラフを入れる枠と言えるオブジェクトChartObjectオブジェクトには、埋め込みグラフの位置を指定するためのTopプロパティ・Leftプロパティが用意されています。
RangeオブジェクトのTopプロパティの値をChartObject.Topプロパティに代入すれば、グラフの上端がセルの上端と同じ位置に移動し、
RangeオブジェクトのLefgプロパティの値をChartObject.Leftプロパティに代入すれば、グラフの左端がセルの左端と同じ位置に移動します。
ActiveChart.ParentでChartObjectを取得
そのようなChratObjectオブジェクトを取得するために、上記のサンプルでは「ActiveChart.Parent」という式を使っています。
Dim cho As ChartObject Set cho = ActiveChart.Parent
オブジェクト変数ではなくWith文を使ったサンプル
特に、グラフ関連のオブジェクトモデルに慣れていない間は、上記のようにオブジェクト変数を使うことをおすすめしますが、以下のようにWith文を使っても同様のコードを書けます。
With ActiveChart.Parent .Top = Range("B2").Top .Left = Range("B2").Left End With
アクティブシートの全埋め込みグラフをセル位置に移動するサンプルマクロ
以下のExcelマクロを実行すると、アクティブシート上の全埋め込みグラフの左端が、それぞれのセルの左端位置にピッタリ移動します。
Dim cho As ChartObject
For Each cho In ActiveSheet.ChartObjects
cho.Top = cho.TopLeftCell.Top
cho.Left = cho.TopLeftCell.Left
Next
End Sub
ChartObject.TopLeftCellプロパティを使うと、ChartObjectオブジェクトの左端位置にあるセルを表すRangeオブジェクトを取得できます。
先ほどは、Excel VBAをお使いの方ならお馴染みの、グローバルメンバーのRangeプロパティを使って取得したRangeオブジェクトの、Topプロパティ・Leftプロパティを使っていましたが、
cho.Top = Range("B2").Top cho.Left = Range("B2").Left
今度は、ChartObjectオブジェクトのTopLeftCellプロパティを使って取得したRangeオブジェクトの、Topプロパティ・Leftプロパティを使っています。
cho.Top = cho.TopLeftCell.Top cho.Left = cho.TopLeftCell.Left
最終更新日時:2022-07-13 12:05
Home » エクセルマクロ・Excel VBAの使い方 » グラフ・Chart » グラフの位置をVBAでセルに合わせる