• ベストアンサー

excel/vbaにてオートシェイプに名前の定義づけ

こんにちは。教えてください。オートシェイプを描きそれに対し名前をつけました。ex)"図"と。それをコピーをすると同じ名前の図形がコピーされます。 同じ名前のついたオートシェイプに対して削除や非表示という操作をしたいです。 書き方を教えてください。 頭の中ではアクティブシートの中に名前が"図"と同じオートシェイプがあれば、そのオブジェクトを削除(非表示もしたい)しなさい。 ていうふうな書き方の感じでいいのでしょうか? VBAを勉強しはじめたばかりです。 教えてください。

  • wakudo
  • お礼率75% (154/205)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 Sub ShapesDelete() Dim shp As Object 'As Shape For Each shp In ActiveSheet.Shapes  If shp.Name = "図" Then   shp.Delete '削除   'shp.Visible = False  '非表示  End If Next shp End Sub 簡単なマクロだと、上記のようなものになります。 私も、VBAを勉強し始めた段階で、オートシェイプに手を出したのですが、さっぱり分からなかったですね。なぜ、難しいかというと、記録マクロでは、オブジェクト名などが、正しく記録されないからです。常に、Selectionを対象とされるからです。

wakudo
質問者

お礼

Wendy02さんへ・・ とっとってもうれしいです!!そしてわかりやすく書いていただいてるのでいがったです。なんとお礼を述べていいか・・。 本当にド素人なので質問して回答がかえってきてもよめなかったりするのではと心配していました。 VBAの勉強をあきらめずにもう少しがんばってみたいと思いました。 ありがとうございます!!

関連するQ&A

  • エクセル:VBAでシート上のオートシェイプ以外の図形を消去したい。

    お世話になります。 ★VBAでシート上のオートシェイプ以外の図形を消去したいのです。 No.1902175で、エクセルシート上の図形の削除方法をいろいろ教えていただきました。今回は、そのときにはあてはまらなかった、「オートシェイプをのぞく図形をVBAで削除したい」のです。 補足:シートは毎月のある行事等の予定表です。オートシェイプにはマクロを登録しているため消したくありません。その他の図は季節の行事に関するクリップボード等の図で、担当者がシートから毎月手作業で削除していたものです 以上、よろしくお願いいたします。

  • 特定のオートシェイプだけ削除するVBA

    エクセルで一枚のシートに複数のオートシェイプを使用したものがあります。 オートシェイプを使用しているセルの範囲は (A1:L22)と(M1:U22)の二箇所なのですが、 VBAで(A1:L22)の範囲にあるオートシェイプのみ削除する事は可能でしょうか? (A1:L22)内のオートシェイプは作業内容により毎回変わるので 形などは特定できません。 また、オブジェクトの選択で範囲指定をした後削除という方法もあるのですが この削除の作業の前後に他の作業のVBAを使用しているので VBAで削除が出来ればと思います。 よろしくお願いします。

  • オートシェイプとは

    昨日は図形の移動でお世話になりました。引き続き図形について質問です。 オフィス2010のワードにてオートシェイプの範囲が分かりません。 挿入の図のところに図、クリップアート、図形、SmartArt、グラフ、 スクリーンショットの6つがあります。   この中で矢印などは図形にあるので、これはオートシェイプだと思います。 クリップアートやsmartArtなどもオートシェイプのような気がします。

  • 【EXCEL VBA】オートシェイプをクリックした時にそのオートシェイプの名前を取得したい

    ワークシートに多数(60個程度)のオートシェイプが配置されています。それらにはひとつひとつ「名前」をつけています。(オートシェイプ1とかを1日とかに変更しました) これらのオートシェイプをボタン代わりにマクロを割り当てて実行しようとしています。 そこで、例えば”1日”と名前を定義したオートシェイプがクリックされた時にその名前”1日”を取得する方法が解りません。 説明が下手でうまく伝わっているか心配ですがよろしくお願いします。

  • 特定の名前のオートシェイプの有無を知りたい(エクセルVBA)

    Excel VBA で、オートシェイプを扱おうとしています。 たとえば、 ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 50, 50).Name = "TestShape1" のようにして、それぞれ名前を付けているのですが、プログラム中、特定のオートシェイプを削除したり、再び同じ名前で作ったり、ということを行っています。 前者の場合、すでに当該オートシェイプが削除されている場合、目的のオートシェイプが存在していないためか、エラーが発生します。また後者の場合も、オートシェイプを重ねて作成することになってしまうケースにエラーが発生します。 On Error Resume Next で回避することも考えられるでしょうが、もっと直接的に、ある名前のオートシェイプが存在する/しない、をチェックしたうえで各処理を行うようにしたいのです。 どのような方法があるでしょうか?

  • ExcelでVBAを利用してオートシェイプ情報取得

    Excelのオートシェイプをテキストデータに変化するVBAを作成したいです ただし対象となるオートシェイプは複数のオートシェイプがグループ化された グループオブジェクトになっています それら特定のパターンを持つオートシェイプオブジェクトの一群があり 1つ1つには想定される名称が存在します 具体的な操作としては複数のオートシェイプオブジェクトを横に並べたイメージダイアグラムを 作成し、それらにそって対応するテキストを配置していきたいというものです このようなオートシェイプの情報をうまく拾う方法、テキストデータと紐づける方法はありませんでしょうか よろしくお願いいたします

  • wordオートシェイプについて

    wordのオートシェイプにて図を作成していたところ、今までは問題無く図や線を引けていたのに、次に線もしくは図を作成したところ、シートに直接張り付いてしまったようになり一切操作を受け付けません。その入力した線以外の図、線に関しては編集・削除等は出来るのですが、操作を受け付けなくなった線に関しては削除すら出来ません。シートを全選択して削除しても消えません。 再度別シートで作成してみましたが、同じ線を引く作業に差し掛かると操作を受け付けなくなってしまいます。 いったいどうすればよろしいでしょうか? ※ちなみに通常通りの線・図であれば、マウスを合わせた際マウスが十字矢印に切り替わるのですが、操作を受け付けなくなった線に関してはマウスも切り替わったりしません。

  • Excel VBAのオートシェイプの名前の取得(?)

    いつもお世話になっております。 ある図形[名前:グループ1](イメージとテキストをグループ化したもの)と ある図形[名前:グループ2](イメージとテキストをグループ化したもの)を コネクター[名前:コネクター1]で接続しています。 (□―□ コンナカンジ・・・) 画面上のどちらかの図形をクリックした時に、 (1)クリックされた図形の名前を取得 (2)クリックされた図形に繋がっているコネクタの情報を取得、 (3)さらにそのコネクタの接続先の図形の名前を取得する ・・・というようなVBAのプログラムを組んでいるのですが・・・、 (1)(クリックされたオートシェイプの名前を取得) Dim objShape As Shape Dim ShapeName as string Set objShape = ActiveSheet.Shapes(Application.Caller) ShapeName = objShape.name (2)(繋がっているコネクタの情報を取得) ※正確には画面上の全シェイプをチェックしコネクタなら配列に格納 For Each sh In ActiveSheet.Shapes 'コネクタ検索 If (sh.Connector = msoTrue) Then Set con(i) = sh i = i + 1 End If Next この後、 If strShapeName = con(i).ConnectorFormat.BeginConnectedShape.Name then・・・ If strShapeName = con(i).ConnectorFormat.EndConnectedShape.Name Then・・・ というチェックをし、Trueなら、選択した図形にくっついているコネクタなんだな・・・というチェックをしたいのですが、ここで質問です。 (1)の段階で選択された図形の名前は、"グループ1"。 しかし、(2)のcon(i).ConnectorFormat.BeginConnectedShape.Nameでコネクタと繋がっている同じ図形の名前は、VBA上では何故か"Freeform 1"という名前を取得してしまいます。 これでは永遠に一致する事はありません。 Excelのワークシート上の左上にある名前空間(?シェイプを選択すると名前が出てくるところ・・・)には"グループ1"と表示されます。 しかし、ここに"Freeform 1"と入れても同じ図形が選択されます。 同じ図形なのに何故二つの名前を持ってしまっているのでしょうか・・・? そしてどうやったら、con(i).ConnectorFormat.BeginConnectedShape.Nameで、"グループ1"の名前を取得するのでしょうか?? どなたかご教授下さい。

  • ワードのオートシェイプで描いた図を……

    オートシェイプで複数の図形を使って系統図のようなものを描きました。 図形の中には文字を入れてあります。グループ化をしてみました。 この図形をそのまま縮小する方法ってありますか? 矢印を使って縮める方法だと、図形の中に入れた字がはみだしちゃう (というか、最後の一字が表示されない)のですが…… どうぞよろしくお願いしますm(__)m

  • オートシェイプの編集

    エクセルでオートシェイプの基本図形の中の台形を選択して、その中に文字を入れたいのですが・・できませんか?ちなみに吹き出しの図には書き込めるようです。よろしくお願いします。

専門家に質問してみよう