Excel VBA(マクロ)で図形の名前を取得、変更する方法/Nameプロパティの使い方

minecraft IT

VBAで図形の名前を取得・変更するには、他のオブジェクト同様Nameプロパティを使います。

スポンサーリンク

名前の取得

図形の名前の取得
図形.Name
※図形はShapeオブジェクトまたはShapeRangeコレクションで指定
vba excel shape name1
この図形の名前を求め、他のセルに表示してみます。
' vba
Range("C1").Value = ActiveSheet.Shapes("楕円 1").Name
ShapeオブジェクトまたはShapeRangeコレクションの後ろに、Nameを付けることで名前が取得できます。
名前で指定した図形の名前を訊くというのもなんか変ですが、たとえばこういったコードになります。
vba excel shape name2
で、実行すると当然「楕円 1」が返る……と思いきや、別の名前が戻されます。
これは2010以降のExcelの仕様で、作成直後の図形は日本語名と英語名のふたつの名前を持ち、どちらでも指定できます(ActiveSheet.Shapes("Oval 1").Nameでも取得できる)。
Nameで取得した場合は英語名が返されます。

名前の変更

' vba
ActiveSheet.Shapes(1).Name = "図形1"
図形の名前を変更するには、Nameの後につけたい名前を指定します。
図形 名前 vba shapes name1
図形の名前が変更され、
図形 名前 vba shapes name2
名前を取得しても、同じ名前が表示されます。

ShapeRangeコレクションの場合

図形 名前 vba shapes name5
ShapeRangeコレクションでも可能とは言ったものの、複数図形の名前をまとめて取得しようとすると、そういうことはできない旨エラーが出ます。
' vba
Range("C1").Value = ActiveSheet.Shapes.Range(Array(1)).Name
Rangeプロパティで単一の図形を指定してやれば、問題なく動きます。

すべての図形の名前を変更・取得

図形 名前 vba shapes name3
図形すべてに名前をまとめてつけたり、名前を取得したい場合は、
' vba
' 図形の数を数え、その回数繰り返す
For i = 1 To ActiveSheet.Shapes.Count
' 名前を変更
ActiveSheet.Shapes(i).Name = "図形" & i
' 名前を書き出し
Cells(i, 3).Value = ActiveSheet.Shapes(i).Name
Next
たとえばこんな感じのコードを書いてやれば、
図形 名前 vba shapes name4
まとめて名前を変更したり、図形の一覧を作ることが可能です。
Excel(エクセル):図形
Excelでは、図形という機能を使うことで四角形や丸、矢印などのオブジェクトをシート状に配置することができます。セルの形状を無視して配置できるので、フローチャートや装飾、注釈などアイデア次第でさまざまな用途に利用できます。 図形作成・操作...
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。
やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ

コメント