DrawingObject

テキストボックスなどの図形にセルにある値を引用して表示させることができる。
図形を選んで、数式をいれるところに=A1などと打ち込めば良い。
これをVBAならどうするかと言えば以下のようになる。 テキストボックスを生成し、そこにA1の値を引用する。
Dim obj As Shape
Set obj = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 171, 91, 191, 56)
obj.DrawingObject.Formula = "=A1"
このDrawingObjectというところになかなか到達しなかった。
例えば
obj.Formula = "=A1"
と書いてもエラーとなってしまう。ヘルプのプロパティを一通り調査したがそれらしいものがない。

それもそのはず、古いExcel時代の名残で、ヘルプにはないという。
本来ならShape型に引き継がれているものだが、FormulaプロパティはShapeのメンバー(またはなんらかのメンバーのメンバー)にも存在しないのでエラーになる。つまり引き継がれていない。酷い話である。

さてもうちょっと追求してみよう。 obj.DrawingObjectを受けるオブジェクト名はなんだろうか。
Dim a As DrawingObject
と書いてもエラーになる。 答えは
Dim a As TextBox
のようだ。やってみればわかるが、このオブジェクト名はポップアップに出てこない。
これも同様に古いExcel時代の名残らしい。
以上を踏まえてプログラムを書いてみると
Dim obj As Shape
Dim tbox As TextBox
Set obj = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 171, 91, 191, 56)
Set tbox = obj.DrawingObject
tbox.Formula = "=A1"
このようにも書くことができる。
しかし、サポート外のオブジェクト名を使っているので、余り良いプログラムとは言えない。しかし他に方法はない。(Select/Selectionを使うのもどうかと思う)

これらのことは このサイトに書いてあり、とても参考になった。
TextBox以外の図形に対応するオブジェクト名やコレクション名もまとめられている。
検索エンジンで色々キーワードを工夫してもなかなか良い具合に出てこないので忘れないようにリンクを張っておくという意味もある。
-