動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2110 ビルド14527.20234 Microsoft Store)
「shape.address VBA」
といった検索キーワードで時折アクセスがあることに気がつきました。
ShapeオブジェクトのAddress(セル番地)を取得しようと、Excel VBAの
MsgBox ActiveSheet.Shapes(1).Address
といったコードを実行したものの、
実行時エラー '438':
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
エラーが発生した方による検索かな、と想像しています。
ShapeにAddressプロパティは存在しない
セルを表すRangeオブジェクトには、セル番地を取得するためのAddressプロパティがありますが、図形を表すShapeオブジェクトにAddressプロパティは用意されていません。
Shapeからセル番地を取得するには、Rangeオブジェクトを取得して、RangeオブジェクトのAddressプロパティを利用します。
ShapeのAddressを取得するサンプルマクロ
Shapeが存在するワークシートがアクティブな状態で、以下のSubプロシージャを実行してください。
Sub ShapeのAddressを取得したい()
With ActiveSheet.Shapes(1)
MsgBox .TopLeftCell.Address
MsgBox .BottomRightCell.Address
End With
End Sub
With ActiveSheet.Shapes(1)
MsgBox .TopLeftCell.Address
MsgBox .BottomRightCell.Address
End With
End Sub
Shapes.Item(1)で取得できる図形の左上セルのアドレスと、右下セルのアドレスが、(絶対参照形式で)順番にメッセージボックスに表示されます。
相対参照形式でAddressを取得したい場合
ここで使用しているAddressは、RangeオブジェクトのAddressプロパティですから、「$」のつかない形でセル番地を取得したいのであれば、
With ActiveSheet.Shapes(1) MsgBox .TopLeftCell.Address(False, False) MsgBox .BottomRightCell.Address(False, False) End With
としてください。
最終更新日時:2022-09-09 15:06
[スポンサードリンク]
Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » ShapeのAddress(セル番地)を取得したい