こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

Excelのマクロを使用してオートシェイプ図形の色を変えたいのです。

オートシェイプ図形を50個ならべて、マウスでクリックしてものは色が変わるようにしたいと思います。
マクロ記録をすると以下のようになりました。
Sub Macro1()
ActiveSheet.Shapes("AutoShape 1").Select
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 45
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
End Sub

このプログラムを50個書くわけにはいかないのですが、プログラムで処理するのに問題点が2つ出てきました。

・オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したいのですが、書式設定にはありませんでした。変更するにはどうすればよいのでしょう?

・クリックしたオートシェイプ図形がどれであるかを返す関数がないと、どの図形がクリックされたかわからないのですが、これを返す関数はあるのでしょうか?

よろしくお願いします。

投稿日時 - 2010-05-02 11:28:27

QNo.5865933

困ってます

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

質問者さんが何をなさりたいのかによって、答えが全く変わってきますが (^_^)

50ある図形の一部について色を変えたい、その手間を省きたい
ということなら F4 キーで繰り返し処理ができます。


手間がかかってもよいから、ご質問の通り動くプログラムを作りたい
ということなら、

> オートシェイプ図形の名前が"AutoShape 1"となっていますが、これを変更したい
  Worksheets("シート名").Shapes("シェイプ名").Name = "あなたの好きな名前"

で変えられます。

ちなみにエクセルが自動でつけてくれた名前を知るには

Sub List()
Dim シェイプ As Shape
  For Each シェイプ In Worksheets("Sheet1").Shapes
    Debug.Print シェイプ.TopLeftCell.Address; " "; シェイプ.Name
  Next
End Sub

などとすればよろしいかと思います。こうすればセル位置で確認できます。
なおここで表示される名前は右端に半角空白を一つあけて連番がついているようです。


> ・クリックしたオートシェイプ図形がどれであるかを返す関数
ありません。但し、その関数を自分で作ることはできます。
例えばこんな感じです

Sub Shapeの色を変える()
  With Worksheets("Sheet1").Shapes(Application.Caller)
    .Fill.ForeColor.RGB = RGB(255, 0, 0)
    .Line.ForeColor.RGB = RGB(0, 255, 0)
  End With
End Sub

で、その自作関数を図形にリンクしてやる方法は
  図形を右クリックして 『マクロの登録』 で登録するか
  シェイプ.OnAction プロパティにそのマクロ名を文字列でセットしてやる
試してみましたが、この自作関数はモジュール上に書く必要があるようです。
それと、もちろんですが、50の図形全部についてマクロの登録がひつようです。
マクロを使って登録してもよろしい。
但し、シートにコマンドボタンがあるときは除外しないとエラーになります。

Sub btnShape_Click()
  Dim Shp0 As Shape
  For Each Shp0 In Worksheets("Sheet1").Shapes
    Shp0.OnAction = "Shapeの色を変える"
  Next
End Sub

投稿日時 - 2010-05-02 21:00:45

お礼

丁寧でくわしい解説よくわかりました。

しかも、マクロの登録まで一気にできるなんて…

ありがとうございました。

投稿日時 - 2010-05-02 21:54:15

ANo.3

このQ&Aは役に立ちましたか?

15人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

オートシェイプとかグラフの名前は勝手に番号振られて名前つけられるから変えられない気がした。
クリックしたときに動作するならなら、selection.name で名前がわかるんじゃないか?
あるいは図形の種類やテキストとかを取得してそれに応じた処理を入れればいいんじゃないの。

投稿日時 - 2010-05-02 11:55:31

ANo.1

Application.Caller
が便利ですよ。


最後に・・・フォームコントロールの利点
http://www.moug.net/tech/exvba/0150072.htm

Shapesにも使えます。

投稿日時 - 2010-05-02 11:45:49

お礼

紹介していただいたページ、本当に参考になります。

ありがとうございました。

投稿日時 - 2010-05-02 21:55:15

あなたにオススメの質問