• ベストアンサー

オートシェイプの表示の切り替え

はじめまして。よろしくお願い致します。 エクセル2003で、楕円などのオートシェイプをクリックすると、表示できたり非表示にしたり、切り替えれるマクロかVBAがあれば教えてください。お願い致します。

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

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.5

>やってみたのですが上手くいきません どううまくいかないのかわからないのですが、オブジェクトの選択状態(白抜き矢印状態)ではイベントは発生しません。 マウスカーソルが白抜き十字架状態でイベントが発生します。 下記はその対応もしています。 'シェープのクリックイベントを設定(どこでもいいが1度実行する) Private Sub Worksheet_Activate() Dim sh As Shape For Each sh In ActiveSheet.Shapes sh.OnAction = ActiveSheet.Name & ".shape_click" 'シート上のシェープがクリックされたら、このシートモジュールのshape_clickを呼ぶ Next 'ついでにやっておいたほうがいいかも ActiveCell.Select '既に選択状態のオブジェクトがあったら選択解除するためにセルを選択 '[オブジェクトの選択]状態 With Application.CommandBars.FindControl(ID:=182) If .State = msoButtonDown Then .Execute '[オブジェクトの選択]状態なら解除 End If '.Enabled = False '[オブジェクトの選択]を変更できないようにする(必要なら入れる。これを実行した場合は必ずどこかで下記のEnabled=Trueを実行する) End With End Sub '[オブジェクトの選択]のEnabledを変更している場合は必要 Private Sub Worksheet_Deactivate() Application.CommandBars.FindControl(ID:=182).Enabled = True '[オブジェクトの選択]を変更できるようにする(変更できなくしている場合は入れる) End Sub 'シェープのクリックイベント Private Sub shape_click() Shapes(Application.Caller).Fill.Visible = Not Shapes(Application.Caller).Fill.Visible 'シェープの塗りつぶしの書式設定でvisibleを逆にする Shapes(Application.Caller).Line.Visible = Not Shapes(Application.Caller).Line.Visible 'シェープの境界線の書式設定でvisibleを逆にする End Sub また、Shapeを消すのは塗りつぶしと境界の表示の反転で行っているので、どちらかだけのものがある場合は下記で。 Private Sub shape_click() Select Case Application.Caller Case "楕円 1", "楕円 2" '塗りつぶしも境界線もある場合 Shapes(Application.Caller).Fill.Visible = Not Shapes(Application.Caller).Fill.Visible Shapes(Application.Caller).Line.Visible = Not Shapes(Application.Caller).Line.Visible Case "楕円 3", "楕円 4" '塗りつぶしだけの場合 Shapes(Application.Caller).Fill.Visible = Not Shapes(Application.Caller).Fill.Visible Case "楕円 5", "楕円 6" '境界線だけの場合 Shapes(Application.Caller).Line.Visible = Not Shapes(Application.Caller).Line.Visible End Select End Sub

paptimuss
質問者

お礼

丁寧な説明ありがとうございます。 無事にできました。本当に助かりました。 ありがとうございます。

その他の回答 (4)

  • wisemac21
  • ベストアンサー率39% (171/429)
回答No.4

オブジェクトの表示/非表示の切り替えはショートカットキーで Ctrl + 6 です こちらを使われた方がよいのではないでしょうか 試してみてください。

paptimuss
質問者

お礼

そのような手もあるんですね。 ありがとうございます。

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

オートシェープのあるシートのVBAに下記をコピー。 一度違うシートを選んで元に戻ると、Worksheet_Activateでシェープのクリックイベントを設定する。 細かい状況が分からないので、全てのシェープの線と塗りつぶしを逆状態にするプログラム。 シェープが見えなくなってもマウスカーソルがその上に移動すると形が変わるはず。 Private Sub Worksheet_Activate() Dim sh As Shape For Each sh In ActiveSheet.Shapes sh.OnAction = ActiveSheet.Name & ".shape_click" Next End Sub Private Sub shape_click() Shapes(Application.Caller).Fill.Visible = Not Shapes(Application.Caller).Fill.Visible Shapes(Application.Caller).Line.Visible = Not Shapes(Application.Caller).Line.Visible End Sub

paptimuss
質問者

お礼

返事が遅れてすみません。 オートシェイプをクリックしたら表示され、またクリックしたらパソコンの画面上では、消えたように見え、マウスをそこにもっていくとマウスの形が変わるのが理想です。 hotosysさんの案が近いようなのですが、上記のやり方をもう少し分かりやすく説明していただけないでしょうか? やってみたのですが上手くいきません…すいません。お願い致します。

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.2

オートシェイプをクリックすることで非表示にすることは可能ですが、非表示にしたオートシェイプをクリックすることができませんので、表示させるには別の方法を考える必要があります。 とりあえずクリックしたら非表示にする方法ですが 1、画面上にオートシェイプを作成します。 2、オートシェイプに名前をつけます。  オートシェイプを選択した状態で画面左上の「名前ボックス」(セルのアドレスが表示されている箇所)につけたい名前を入力しEnterキーを叩きます。  ※仮にDAENとしておきます。 3、オートシェイプを選択した状態で右クリックし、ショートカットメニューから「マクロの登録」 4、「新規作成ボタン」をクリックします。 5、以下のマクロ(VBA)を記述 Activesheet.Shapes("DAEN").Visible = False 6、Visual Basic Editorを閉じます。 表示させる際は、標準モジュールに Sheets("Sheet1").Shapes("DAEN").Visible = True というマクロを作成し、メニューから実行するかボタンなどにマクロを登録します。 ※オートシェイプがSheet1にある場合です。

paptimuss
質問者

お礼

参考にさしていただきます。ありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

図形が消えてしまうと画面上では捉えられないのではと思うので 別にコマンドボタンを1つシートに貼り付け Private Sub CommandButton1_Click() If ActiveSheet.Shapes("Oval 2").Visible = True Then ActiveSheet.Shapes("Oval 1").Visible = False CommandButton1.Caption = "表示" Else ActiveSheet.Shapes("Oval 1").Visible = True CommandButton1.Caption = "非表示" End If End Sub これでコマンドボタンをクリックすると消えたり現れたりする。 コンなのはどうだろう。 場合により("Oval 1").の1の部分は変わるから注意。

paptimuss
質問者

お礼

ありがとうざいます。 試してみます。

関連するQ&A

  • マクロでオートシェイプを表示したいのですが(泣)

    マクロが理解できない初心者です。 エクセルで書類を作成しているのですが 「特定のセルに入力された文字列を 楕円のオートシェイプで囲む」といった要領で 分類する項目が大量にある書類を作成することになり マクロの記録を使ってマクロを作成しようと試みたのですが うまくいかず、困っています・・・ VBAなどで記入してマクロを作るということは 検索してわかったのですが 勉強する時間的余裕がありません・・・ どなたかご教授ください おねがいします。 例 |新規|継続|といった項目のどちらかを分類するために 囲みたいセルをダブルクリックすると 楕円のオートシェイプで項目の文字列を囲むいう感じです。 ダブルクリックするとシェイプが表示され さらにダブルクリックすると非表示になるといったマクロが できないでしょうか?

  • オートシェイプが消えたり出たりする

    Windows 7+ Excel 2013を利用しています。 オートシェイプを200個位(四角、丸)入れています、重ね合わせはありません。 エクセルで職場のレイアウトを作成・更新しているのですが、 突然、全てのオートシェイプが表示されなくなり、オートシェイプがあるあたりの セルをクリックしたら、幾つかのオートシェイプが表示され、マウスを動かすと オートシェイプが消えてしまいます。 また、別のセルをクリックしたら、先とは、違うパターンで幾つかオートシェイプが 表示され、マウスを動かすと、何個かオートシェイプが表示されたまま、他のが消えます。 オブジェクトの選択と表示では、全て表示になっていますが、一旦、全て非表示にして、全て表示にしても、全く、オートシェイプが表示されません。 慌てて、保存せずに、終了して、パソコンを再起動、変になったエクセルブックを開いても直っていません。 仕方なく、先月のブックをコピーして、修正しています。 変になったエクセルブックですが、他のパソコン何台かで開いても同じようになります。 マクロでもあるのかと思い、Alt + F10を押してみましたが、コードは書かれていません。 諦めかけていたら、調べていないPCから開いたら、表示されています。 そこで、そのPCで上書き保存してから、変になったPCで開いたら、表示されています。 何故なんでしょうか? エクセルブックは、壊れてなかったんでしょうか?

  • オートシェイプ

    オートシェイプで文字列を楕円で囲んだセルを別のせるに貼り付けると楕円がでてこないんですが良い方法を教えて下さい。 エクセル2003です。

  • シート上のオートシェイプをすべて非表示にしたい

    マクロで ActiveSheet.Shapes.Visible = False と作って見ましたが、だめでした。 シート上のオートシェイプをすべて非表示にしたい時は、マクロではどのようにすれば良いでしょうか? よろしくお願い致します。 Excel2002 WINXP

  • エクセル2007でのオートシェイプのマクロ記録

    エクセル2007でのオートシェイプのマクロ記録ができません。 エクセル2000、エクセル2003では、可能です(テスト済)。 2007でのオートシェイプのマクロ記録のやり方は何か特殊なのでしょうか。 たとえば、エクセル2007の開発タブから「マクロの記録」を選び、楕円を描いてマクロ記録を終了し、VBEでそのマクロを開いても、題名等はあるものの sub 題名()から End Sub までの間にコードはなく空白になります。 おわかりの方にお尋ねします。 検索してみましたが、件数が多く閲覧した範囲では、見当たりませんでしたので、よろしくお願いします。

  • excel VBA オートシェイプのテキスト段落

    おはようございます。 【オートシェイプ内のテキスト行間を指定するプロパティ】 オートシェイプ内のテキスト行間を指定するプロパティはありますでしょうか? excel 2007で オートシェイプにテキストをいれた場合、 右クリックすると「段落」という項目がでてきて、 オートシェイプ内のテキストの行間を指定できたのですが、 オートシェイプ内のテキストの行間をVBAで指定することはできるのでしょか? (マクロを登録してもなにも記述されていないので、困っています。) 最終的にはアクティブブックの全シートのオートシェイプの行間を変更する VBAにしたいと思っています。 参考URL等あれば教えていただけませんでしょうか? よろしくお願いいたします。

  • オートシェイプ図形をクリックでコメントを表示したい

    エクセルで、オートシェイプ図形をクリックした際、コメントを表示したいです。 (データ→入力時メッセージのように…セルをクリックではなく、図形をクリックしてコメント表示) マクロ等で可能なのでしょうか。 可能であれば、右クリック→マクロの登録欄へ記入する文字列をお教え頂けないでしょうか。

  • オートシェイプ同士をリンクさせる事は出来ますか?

    同シート内に、「1」と入力してある楕円のオートシェイプが2つあります。 どちらかをクリックすると、もうひとつのオートシェイプへ飛んでいける・・・ ようなことを、実現するにはどうしたらいいでしょうか? ちなみに、シートが分かれることはありません。 オートシェイプは、1~50 までの連番で、シート内に2つ存在します。 オートシェイプ同士をリンクさせる事は出来ますか? 広いシートの中で、同じ番号を見つけるのが大変なのです。 オートシェイプだと、検索に引っ掛かってくれないので。。 環境は、Windows2000 office2000 です。 ご教授の程、よろしくお願い致します。

  • WORD VBA オートシェイプにマクロを登録したい

    オートシェイプ(四角)をクリックする度に 塗りつぶしの色が白→黒→白というように変わるように したいのですが。(チェックボックス代わりに使いたい) EXCELのオートシェイプには「マクロを登録する」と いう項目がありますが、WORDにはありません。 何かの方法でマクロを登録したいのですが 方法はありますか。 よろしくお願い致します。

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

    画像(マスコット)をクリックすると コメント(オートシェイプ)が出現する! ↑ そんな事は出来るのでしょうか? 例えば、フォームを使ったら簡単なのですが・・ 楕円形でいかにもしゃべっている感じにしたいのですが・・ 是非、教えて下さい! お願いします

専門家に質問してみよう