【VBA】図形やグラフがどのセル上にあるかを調べる方法|TopLeftCellとBottomRightCellの使い方

Excelでは、グラフや図形(シェイプ)を自由に配置できますが、それらがどのセルの上に置かれているかを知りたい場面があります。
たとえば、帳票作成や図形位置の制御、データと図形の対応関係を調べるときなどです。

本記事では、VBAを使ってシート上の図形やグラフが、どのセル上に位置しているかを調べる方法を、実用的なコードとともに解説いたします。


目次

コード例:全ての図形の位置セルを取得する

Dim shp As Shape

For Each shp In ActiveSheet.Shapes
    MsgBox "図形名:" & shp.Name & vbCrLf & _
           "左上のセル:" & shp.TopLeftCell.Address & vbCrLf & _
           "右下のセル:" & shp.BottomRightCell.Address
Next

コードの解説

1. ActiveSheet.Shapes

  • 現在のシート上にあるすべての図形やグラフなどのオブジェクトを取得します。
  • グラフ・画像・ボタン・テキストボックスなど、Shape オブジェクトとして扱われます。

2. TopLeftCell

  • オブジェクトの左上の角が乗っているセルのアドレスを返します。
  • 図形が複数セルにまたがっている場合でも、最も左上のセルが対象です。

3. BottomRightCell

  • オブジェクトの右下の角が乗っているセルのアドレスを返します。

4. MsgBox による表示

  • 各図形の名前、左上セル、右下セルを、メッセージボックスで表示しています。

実行結果のイメージ

図形「Rectangle 1」が B3:D6 の範囲上に配置されていた場合:

図形名:Rectangle 1  
左上のセル:$B$3  
右下のセル:$D$6

応用:セル位置に応じて図形を制御する

例:図形がA列にかかっていたら削除する

If shp.TopLeftCell.Column = 1 Then
    shp.Delete
End If

例:B列〜D列にある図形だけ色を変える

If shp.TopLeftCell.Column >= 2 And shp.BottomRightCell.Column <= 4 Then
    shp.Fill.ForeColor.RGB = RGB(200, 230, 255)
End If

注意点と補足

内容説明
TopLeftCellBottomRightCell は図形のサイズや位置に依存します図形の中心位置ではなく、角の位置が基準になります
図形の重なりがある場合セル単位での配置を正確に把握したいときは、Zオーダー(前面・背面)にも注意が必要です
名前のない図形でも取得可能shp.Name は自動的に「Rectangle 1」などの名前が割り当てられています

まとめ

処理内容使用プロパティ説明
図形の左上セルを取得TopLeftCell図形が重なっている最も左上のセル
図形の右下セルを取得BottomRightCell最も右下のセル
図形の名前を取得Name自動命名された名前や任意の名前が対象

この方法を使えば、シート上のすべての図形やグラフの配置セル情報を取得し、動的に処理を行うことが可能です。
帳票テンプレートの自動化や、図形配置ミスのチェック、自動整列ツールの作成などにも活用できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次