• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAのオートシェイプの名前の取得(?))

Excel VBAのオートシェイプの名前の取得方法は?

このQ&Aのポイント
  • Excel VBAを使用して、オートシェイプの名前を取得する方法について質問です。
  • 特定の図形をクリックした時に、その図形の名前や繋がっているコネクタの情報を取得するVBAプログラムを作成していますが、図形の名前を取得する際に問題が発生しています。
  • 図形の名前の表記が複数存在し、VBA上での名前とワークシート上での表示名が異なるため、名前の取得について詳しく教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#52504
noname#52504
回答No.1

「グループ1」「グループ2」といった"名前"ですが、 自動的につけられた「既定の名前」なのでしょうか? それとも、手動で変更した名前なのでしょうか? 「既定の名前」であれば「グループ 1」のように半角スペースが入るはずですし、 コネクタは「オートシェイプ 1」の形式になるはずなので、後者でしょうか? どちらかによって状況が少し変わってくるのですが…。 ---------------------------- >同じ図形なのに何故二つの名前を持ってしまっているのでしょうか・・・? エクセル上に図形を作成すると、その図形には「既定の名前」がつきます。 「既定の名前」は図形の種類+連番の形式で作成されますが、 日本語表示と英語表示があって、例えば、 ワークシート上で「四角形 1」と表示される図形は、 VBA上では「Rectangle 1」となります。 ワークシート上あるいはVBA上で名前を変更すると、 そちらの名前が優先して表示されますが、 「既定の名前」がなくなったわけではなく、 引き続いて「既定の名前」で操作することができます。 変更された名前には日本語表示/英語表示といったものはありません。 ---------------------------- >これでは永遠に一致する事はありません。 >どうやったら、con(i).ConnectorFormat.BeginConnectedShape.Nameで、 >"グループ1"の名前を取得するのでしょうか?? 一致しないとしたら、たぶん別の理由からだと思われます。 VBA上では図形の名前は一貫して英語表示で取り扱われるので、 「英語表示」と「英語表示」(あるいは「変更された名前」と「変更された名前」)を 比較することになり、問題は生じません。 「グループ1」というのが変更された名前であれば、 VBA上でも「グループ1」という名前が返ってくるはずです。 一方、「グループ1」というのが既定の名前「グループ 1」であれば、 VBA上で返ってくる名前は「Group 1」のはずです。 おそらく、"グループ1"と"Freeform 1"は同じ図形を指してはいません。 前者は、 「イメージとテキストをグループ化したもの」="グループ 1"="Group 1" を指しているのに対し、 後者は、 「グループ化された図形の、イメージの部分」単体="フリーフォーム 1"="Freeform 1" を指しているのではないかと思います。 「グループ全体の名前」と「グループの部品の名前」を比較しているのが、 不一致の原因ということです。 "Freeform 1"という名前を返す図形について、 .ParentGroup.Nameで、その図形が属するグループの名前を取得して、 グループの名前どうしを比較するようにすれば解決するのではないかと思われます。 以上ご参考まで。長乱文陳謝。

kyo----
質問者

お礼

deus_ex_machinaさん!! 本当に解り易く、ご丁寧にご説明頂きまして、本当に感謝致します!! 実際にはシェイプの名前は生成時に私が独自に命名したものになります。 私が命名した名前と、VBA上でコネクタに接続しているシェイプの名前が違うのではなく、名前は同じだけれども、コネクタが接続している"部品"が違っていたのですね!! >「グループ化された図形の、イメージの部分」単体= >"フリーフォーム 1"="Freeform 1" >を指しているのではないかと思います。 この部分でピンときました!! 本当にありがとうございました! 感謝致します!!

関連するQ&A