• 締切済み

ある範囲の図形を選択

EXCELで、ある範囲の図形を選択するマクロが組みたいのですが、 マクロの自動記録でオブジェクトの選択ボタンで範囲指定をすると、 マクロ自体はPicture4,Picture5,…というように 各図形として判断しているようで、範囲内の選択というわけにはいかないようで困っています。 私がやろうとしているのは、すでにひとつの図形(日本地図)があり、 その上に貼り付けられた図(都市の写真)のみ選択したいのです。 選択したい図(都市の写真)の名前は都度かわるため、Picture4,Picture5,…となると、別の名前のものが貼り付けられたときに認識しないので困るのが一点、もう一点は、既に地図が貼り付けられた状態で、この地図自体は選択には入れないで地図の内側の範囲内にある都市の写真のみを選択したいという二点が課題で・・どうしたらよいものか困っています。

  • peko4
  • お礼率84% (11/13)

みんなの回答

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.5

>写真の中にグループ化されていた写真が混じっていました。 確かに、グループ化された写真が混じっていると、 エラーになりますね。気が付きませんでした。 画像が存在するときにも「地図上に画像が存在しません。」の メッセージが出る件ですが、 エラーが無いときは ErrorHandler:以下が実行されないように、 Exit Sub でプロシージャを抜ける必要があります。 以下のような感じでしょうか。 Sub 地図上の画像選択1_1() Dim r1 As Range Dim r2 As Range Dim p As Picture Dim ary() As String Dim i As Integer i = 0 With ActiveSheet.Pictures("Picture 3") Set r1 = Range(.TopLeftCell, .BottomRightCell) End With For Each p In ActiveSheet.Pictures Set r2 = Range(p.TopLeftCell, p.BottomRightCell) If Not Application.Intersect(r1, r2) Is Nothing And p.Name <> "Picture 3" Then ReDim Preserve ary(i) ary(i) = p.Name i = i + 1 End If Next Set r1 = Nothing Set r2 = Nothing On Error GoTo ErrorHandler: ActiveSheet.Pictures(ary).Select Exit Sub  '←この1行を追加 ErrorHandler: MsgBox "地図上に画像が存在しません。" End Sub

peko4
質問者

お礼

ありがとうございます!!! できましたっっ(*^o^*) この度は本当にいろいろと教えていただき、ありがとうございます。 ぶ厚い本を購入していろいろ読んだのですがなかなか思い通りにいかず すごく困っていたのですが、お蔭様で完成しました♪ これで仕事がスムーズに捗ります! もぅ何とお礼を申し上げてよいやら・・というほど感動です! 本当にありがとうございました!

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.4

>Picturesクラスのselectメソッドに失敗しました。 ごめんなさい。 正直言って実際のシートを見てみないことには エラーの理由はわかりません。 (見てもわからないかもしれませんが・・・) あてずっぽうですが、シートを保護しているとかありませんか?

peko4
質問者

お礼

お礼が遅くなって申し訳ありません。 エラーの原因が何かよくわからなくて何度もやっていたら 写真の中にグループ化されていた写真が混じっていました。 エラーの原因はそれだったようです。 お手数おかけしました。 ありがとうございました。 実は今、マクロを登録した画像選択ボタンを作ったのですが、 もしも地図上に画像(都市の写真)が1枚も存在しなかったときに エラーが出てしまいます。 もし都市の写真が1枚も存在しないのに画像選択ボタンを押してしまったら「地図上に画像が存在しません。」というメッセージを表示させたくて本を見ながら入れてみたのですが・・・うまくいきません。なぜか画像が存在するときにもこのメッセージが表示されます。。。 やはりエラー処理の入れ方が間違っているのでしょうか? もしよろしければアドバイスをいただけると助かります。 本当にすみません。 Sub 地図上の画像選択1_1() Dim r1 As Range Dim r2 As Range Dim p As Picture Dim ary() As String Dim i As Integer i = 0 With ActiveSheet.Pictures("Picture 546") Set r1 = Range(.TopLeftCell, .BottomRightCell) End With For Each p In ActiveSheet.Pictures Set r2 = Range(p.TopLeftCell, p.BottomRightCell) If Not Application.Intersect(r1, r2) Is Nothing And p.Name <> "Picture 546" Then ReDim Preserve ary(i) ary(i) = p.Name i = i + 1 End If Next On Error GoTo ErrorHandler: ActiveSheet.Pictures(ary).Select Set r1 = Nothing Set r2 = Nothing ErrorHandler:MsgBox"地図上に画像が存在しません。" End Sub

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

> 作業とは別に > この選択した図を削除するには「Delete」をどこかにつけなければ > いけないのだと思うのですが、どこにつければよいでしょうか? 「この作業と別」 ということですが、選択が目的ではなく、削除だけの場合は、 コード上の削除する時点が変わってきます。 ◎ 先のように該当する図形を選択し、MsgBoxで「削除するか?」にYesを選択した  場合は、削除し、Noを選択した場合は、選択状態のままにするのであれば、  こんな感じです。(先のコードにDeleteを付加する) Sub 範囲内図形削除() Dim Pic As Picture Dim Rng As Range Dim Cnt As Long If TypeName(Selection) = "Range" Then   Set Rng = Selection   For Each Pic In ActiveSheet.Pictures     If Not Intersect(Rng, Pic.TopLeftCell) Is Nothing Then       If Not Intersect(Rng, Pic.BottomRightCell) Is Nothing Then         If Cnt = 0 Then           Pic.Select         Else           Pic.Select (False)         End If         Cnt = Cnt + 1       End If     End If   Next   If Cnt = 0 Then     MsgBox "該当する図形は、見つかりません。", vbExclamation   Else     If MsgBox(Cnt & " 個の図形が見つかりました。" & String(2, vbLf) & _       "削除しますか?", vbYesNo + vbQuestion) = vbYes Then Selection.Delete   End If Else   MsgBox "セル範囲を選択してください。" End If Set Rng = Nothing End Sub ◎ 該当図形を選択せず、即 削除する場合は、こんな感じです。 Sub 範囲指定図形削除() Dim Pic As Picture Dim Rng As Range Dim Cnt As Long If TypeName(Selection) = "Range" Then   Set Rng = Selection   For Each Pic In ActiveSheet.Pictures     If Not Intersect(Rng, Pic.TopLeftCell) Is Nothing Then       If Not Intersect(Rng, Pic.BottomRightCell) Is Nothing Then         Pic.Delete         Cnt = Cnt + 1       End If     End If   Next   If Cnt = 0 Then     MsgBox "該当する図形は、見つかりません。", vbExclamation   Else     MsgBox Cnt & " 個の図形を削除しました。"   End If Else   MsgBox "セル範囲を選択してください。" End If Set Rng = Nothing End Sub コードを解析して、実情に合わせた形のコードにされたら良いと思います。

peko4
質問者

お礼

ありがとうございます。 該当図形を選択せず即削除の方法で行わせていただくことにしました。 わがままを言ってお手数をおかけしました。 すごく助かりました。 本当に感謝です!

  • masa_019
  • ベストアンサー率61% (121/197)
回答No.2

こんにちは。 日本地図の名前を "Picture 1" として、 この日本地図と少しでも重なっている、 その他の図を全て選択するとして、 Sub Sample() Dim r1 As Range Dim r2 As Range Dim p As Picture Dim ary() As String Dim i As Integer i = 0 With ActiveSheet.Pictures("Picture 1") Set r1 = Range(.TopLeftCell, .BottomRightCell) End With For Each p In ActiveSheet.Pictures Set r2 = Range(p.TopLeftCell, p.BottomRightCell) If Not Application.Intersect(r1, r2) Is Nothing And p.Name <> "Picture 1" Then ReDim Preserve ary(i) ary(i) = p.Name i = i + 1 End If Next ActiveSheet.Pictures(ary).Select Set r1 = Nothing Set r2 = Nothing End Sub

peko4
質問者

お礼

ありがとうございます。 私の思い通り図を選択することができました。 初心者の私でも希望通りのことができそうです。 本当に本当に助かりました。 本当にありがとうございました!

peko4
質問者

補足

昨日はありがとうございました。 実は、教えて頂いたとおりにコードを貼り付け使用しているのですが、 日本地図上にある都道府県の写真を日本地図の横にある 文章のあたりに移動して、改めて『日本地図上にある都道府県の写真のみ選択』を実行すると、「ActiveSheet.Pictures(ary).Select」のところでどうしてもエラーになってしまいます。 エラーになるのは、 都道府県の写真を横の文章のあたり1~3枚移動した場合のみ (4枚以上を移動した場合にはエラーはでません) エラーの内容は、 実行時エラー1004 Picturesクラスのselectメソッドに失敗しました。 もし教えて頂けると助かります。 お手数おかけして申し訳ありません。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.1

セルを選択し、その中にスッポリ入っている図形を選択する ということで 宜しければ、こんな感じで如何でしょうか。 もし、セル選択範囲に図形の左上隅だけが入っているものだけを選択したい場合は、 後の If Not Intersect ~ と対応する End If を削除します。(9、16行目) Sub 範囲内図形選択() Dim Pic As Picture Dim Rng As Range Dim Cnt As Long If TypeName(Selection) = "Range" Then   Set Rng = Selection   For Each Pic In ActiveSheet.Pictures     If Not Intersect(Rng, Pic.TopLeftCell) Is Nothing Then       If Not Intersect(Rng, Pic.BottomRightCell) Is Nothing Then         If Cnt = 0 Then           Pic.Select         Else           Pic.Select (False)         End If         Cnt = Cnt + 1       End If     End If   Next   MsgBox Cnt & " 個の図形を選択しました。" Else   MsgBox "セル範囲を選択してください。" End If Set Rng = Nothing End Sub

peko4
質問者

お礼

ありがとうございます。 とても助かります。 実は、私が行おうとしている日本地図上の作業とは別に あるセル範囲内での図形の削除というのもしなければならなかったので そちらもすごく悩んでいたのですが、 こちらの方法を使わせていただきたいと思います。 ご親切に教えて頂けて、本当に嬉しいです。 この選択した図を削除するには「Delete」をどこかにつけなければ いけないのだと思うのですが、どこにつければよいでしょうか? 重ね重ねすみません。 もし教えていただければ助かります。

関連するQ&A

  • 図形と図はグループ化は出来ないのですか?

    2007です。ワードです。 図形(四角)と図(写真)を並べ、ホームタブ―編集GRのオブジェクトを選択―両方を囲み―グループ化をしたいと思っていますができません。図形と図はグループ化は出来ないのですか? 図同士は出来ますか?(もしかして、図はオブジェクトとは云わないのですか?)

  • Excelのマクロで特定のセル範囲に貼り付けてある写真を削除したい

    エクセルのマクロを使って、ワークシートの特定の範囲に貼り付けてある写真を全て消したいのですが、貼り付けの際に各写真には名称を付けていなかったので、オブジェクト名で選択して削除するという手段が使えません。 イメージとしては、図形描画ツールバーの「オブジェクトの選択」ボタンを押して特定のセル範囲にあるオブジェクトを選択して削除するといった作業をマクロ化したいのです。ワークブックが数百あり、写真の張り付いているセル範囲は全て同じなのですが、写真のオブジェクト名は全て異なり規則性が無いのです。 良い方法があれば教えてください。

  • 図形一括選択

    OFFICE2003では、「図形描画」ツールバー「オブジェクトの選択」(白抜き矢印のボタン)を押した後、マウスを左クリックしながらドラッグすれば、その範囲のオブジェクトを一括選択できますがOFFICE2007では同様の機能はあるのでしょうか?

  • word2010で複数の図形を一気に選択する

    図形や図を同時に複数選択する場合、オブジェクトの選択がうまく使えないようですが、みなさんはShiftキーやCtrlキーを押しながら選択されているのでしょうか。

  • 図形とテキストボックスの全部を簡単に選択したい

    Word 2010で、描画キャンバス内にたくさんの図形とたくさんのテキストボックスとがあるとき、その全部を選択してグループ化するときに、図形とテキストボックスの数が多いと、1個ずつ選択していくと全部選択するのが手間です。 「オブジェクトの選択」で範囲指定すると、図形は全部選択できますがテキストボックスが全く選択されません。 たくさんの図形とテキストボックスの全部を簡単に選択する方法があるでしょうか。

  • 指定範囲内で図形等を削除する方法は?

    Windows、Xp。 Excel で、シート内に幅広くオートシェィプ等で描いたいろんな図形があるとします。これらの図形を、ある範囲をドラッグで指定して、その範囲内の図形だけを削除したいのですが、どうしたらよいか操作方法を教えてください。因みに、セル範囲を指定し ⇒ [編集] ⇒ 「ジャンプ」 ⇒ 「セル選択」 ⇒ 「オブジェクト」 ⇒ OK  と操作すると、シート内の全ての図形が対象になってしまい目的を達することができません。範囲の指定の仕方と指定するタイミングを教えてください。お願いします。

  • Excel2007で図形の選択をしたい

    Excel2002を使用していた頃は、ステータスバーの上に「図形描画ツールバー」を置いて、テキストボックスやワードアート、各種図形などを矢印ツールを使って、マウスで範囲選択すれば一気にまとめて削除ができたのですが、2007には、図形描画まわりの機能は確かについているのですが、私がしたい「一括選択」するための矢印ツールが見つかりません。 クイックアクセスツールバーのカスタマイズの中に、「オブジェクトの選択と表示」はあるのですが、私が欲しいのは「まとめて選択」→「まとめて削除」するための、矢印ツールなんです。 これが見つからないので、いちいち1つ1つ図形やテキストボックスを選択してDELETEしていますが面倒でなりません・・・。(というか、2007で見た目含め仕様が変わって使いづらいというのが本音です) どなたかご存知の方(そういう機能はなくなった、代わりにこういう方法があるなど)いらっしゃいましたら、ご教授ください!よろしくお願いします。

  • VBA Shapes コピーと名前

    どうも、お世話になっています。 VBA初心者です。 エクセルのワークシート上の ActiveSheet.Shapes("Picture 1") を コピペするマクロを 作っているのですが あらたにコピーされた図形の名前を設定できますか。 出来たオブジェクトを選択するマクロができなくて困っています。 ご教授願います。

  • 一気に選択状態にする方法 図形

    アクセスならフォーム上で、選択したいオブジェクトをすべて選択状態にできますが パワポでそういう動作は不可能でしょうか? 画像は、上から三つの図形を選択状態にしたく、マウスで選択範囲を表示させたのですが、 マウスを離すと、何も選択されていません。 今水色の状態の3つの図形を一気に選択状態にする方法はないですか?

  • エクセル マクロ 選択中の複数の図形名を表示するには?

    エクセル マクロ 選択中の複数の図形名を表示するには? お世話になります。 図形を選択(単一・複数の時あり)している状態で ボタンを押すと図形の名前がメッセージボックスに表示される といった事をしたいのですが、 最近マクロを始めたばかりでどういうコードを書けばいいのかわかりません 一応↓の様に 単一選択している図形の名前を出すまでは何とか自力で出来ましたが、 Sub 図形名の表示_Click() MsgBox (Selection.ShapeRange.Name) End Sub 複数選択した場合の出す方法がわかりません。 どのようにコードを書けばいいのかご教授ください。

専門家に質問してみよう