なぜグラフの上に置いた図形は、勝手に移動してしまうのか
Excelで分析資料を作成していると、グラフの特定箇所を強調するために「矢印」や「吹き出し」などの図形を配置することがよくあります。しかし、グラフを移動させたり、行を挿入してグラフの位置がズレたりすると、せっかく配置した図形が元の場所に置き去りにされてしまい、頭を抱えた経験はありませんか?
これは、Excelの仕様上「グラフ」と「図形」が独立したオブジェクトとして扱われているためです。しかし、少しの工夫とVBAの知識を組み合わせることで、グラフと図形を「運命共同体」にすることができます。
図形をグラフに「埋め込む」という発想
まず、最もシンプルでVBAを使わない解決策は「グラフエリア内での作成」です。
グラフをクリックして選択した状態で、上部メニューの「挿入」から図形を描画してみてください。こうすることで、図形は「シート」ではなく「グラフオブジェクト」の子要素として認識されます。これにより、グラフを移動させれば図形も追従するようになります。
しかし、実務では「既存の図形を後からグラフに紐付けたい」「複数のグラフにまたがる複雑な注釈を自動制御したい」というケースも多いはずです。ここで登場するのがVBAによる制御です。
VBAで図形の位置を強制的に同期させる
以下のコードは、特定のグラフ(Chart 1)と、それに関連付けたい図形(Rectangle 1)の位置を完璧に一致させるためのスニペットです。
サンプルコード
Sub SyncShapeToChart()
Dim cht As ChartObject
Dim shp As Shape
‘ 対象となるグラフと図形を指定
Set cht = ActiveSheet.ChartObjects(“グラフ 1”)
Set shp = ActiveSheet.Shapes(“四角形 1”)
‘ 図形の座標をグラフの座標に合わせる
With cht
shp.Left = .Left + 50 ‘ グラフ内でのオフセット調整
shp.Top = .Top + 20
End With
End Sub
このコードの肝は、.Left や .Top プロパティをグラフの基準位置に対して相対的に指定している点です。
ベテラン講師からのワンポイントアドバイス
実務でこれを活用する場合、単に位置を合わせるだけでなく、「SelectionChangeイベント」と組み合わせるのがプロのやり方です。
シートのモジュールに「Worksheet_SelectionChange」を記述し、グラフを選択した瞬間に図形の座標を再計算させるようにすれば、ユーザーがグラフをドラッグして移動させた直後に、図形がパッと追従して正しい位置に収まるような「動的なダッシュボード」が作成可能です。
図形を一つひとつ手作業で修正するのは、もうやめましょう。VBAで「配置のルール」を定義してしまえば、どんなにレイアウト変更が激しい資料でも、一瞬で整った状態に戻すことができます。ぜひ、あなたのツールボックスに加えてみてください。
