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
注意点と補足
内容 | 説明 |
---|---|
TopLeftCell ・BottomRightCell は図形のサイズや位置に依存します | 図形の中心位置ではなく、角の位置が基準になります |
図形の重なりがある場合 | セル単位での配置を正確に把握したいときは、Zオーダー(前面・背面)にも注意が必要です |
名前のない図形でも取得可能 | shp.Name は自動的に「Rectangle 1」などの名前が割り当てられています |
まとめ
処理内容 | 使用プロパティ | 説明 |
---|---|---|
図形の左上セルを取得 | TopLeftCell | 図形が重なっている最も左上のセル |
図形の右下セルを取得 | BottomRightCell | 最も右下のセル |
図形の名前を取得 | Name | 自動命名された名前や任意の名前が対象 |
この方法を使えば、シート上のすべての図形やグラフの配置セル情報を取得し、動的に処理を行うことが可能です。
帳票テンプレートの自動化や、図形配置ミスのチェック、自動整列ツールの作成などにも活用できます。