質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1423閲覧

エクセルのVBAを使ってセルの入力に応じて図形(オートシェイプ)の色を変更したい

texDL

総合スコア2

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/09/22 03:00

前提・実現したいこと

エクセルのVBAを使ってセルの入力に応じて図形(オートシェイプ)の色を変更したいのですが、助けていただけないでしょうか?

発生している問題・エラーメッセージ

内容はSheet1に配置してある図形(図形1)の色を、Sheet2のB2セルに「異常」の文字が入力されている場合は、赤何も入力されていない場合は透明になるようにできないでしょうか?

VBAはコピペで簡単なものを使ったことある程度です。

該当のソースコード

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "Sheet2!B2" And Target.Value = "異常" Then ActiveSheet.Shapes("図形1").Select Selection.ShapeRange.Fill.ForeColor.SchemeColor = 2 '赤 End If End Sub

また、図形は複数あり、それぞれ別のセルから「異常」の文字列を検知したいです。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんな感じでどうでしょうか。

VBA

1Private Sub Worksheet_Change(ByVal Target As Range) 2 3 Dim shpName 4 Select Case Target.Address 5 Case "$B$2" 6 shpName = "図形1" 7 Case "$B$3" 8 shpName = "図形2" 9 Case Else 10 Exit Sub 11 End Select 12 13 If Target.Value = "異常" Then 14 Me.Shapes(shpName).Fill.Visible = msoTrue 15 Me.Shapes(shpName).Fill.ForeColor.SchemeColor = 2 '赤 16 Else 17 Me.Shapes(shpName).Fill.Visible = msoFalse 18 End If 19 20End Sub 21 22

投稿2021/09/22 03:16

jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

texDL

2021/09/22 04:54

jinoji様 ありがとうございます。 やりたかったことはうまくいきそうです。 現状 「異常」→赤 「(入力無し)」→透明 ですがここに 「警告」→黄色 等のパターンを追加したい場合は Me.Shapes(shpName).Fill.ForeColor.SchemeColor = 5 '黄 をどのように組み込めばよいのでしょうか?
texDL

2021/09/22 05:03

ためにし、 下記のコードに編集してチェック中なのですが、おかしなところはないでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Dim shpName Select Case Target.Address Case "$B$2" shpName = "図形1" Case "$B$3" shpName = "図形2" Case Else Exit Sub End Select If Target.Value = "異常" Then Me.Shapes(shpName).Fill.Visible = msoTrue Me.Shapes(shpName).Fill.ForeColor.SchemeColor = 2 '赤 ElseIf Target.Value = "警告" Then Me.Shapes(shpName).Fill.Visible = msoTrue Me.Shapes(shpName).Fill.ForeColor.SchemeColor = 4 '黄 Else Me.Shapes(shpName).Fill.Visible = msoFalse End If End Sub
texDL

2021/09/22 05:23

何度もコメントしてすみません。 黄色の色番号は5でした。 ElseIf で条件を追加できました、ありがとうございます。 可能であれば、「異常」の値の参照セルはSheet2で図形はSheet1に配置したいのですが、 Case"Sheet2!$B$2" shpName = "図形1" と書くと色が変わりません。 正しくはどのように指定すればよいでしょうか? 質問ばかりで申し訳ございませんが、よろしくお願いします。
jinoji

2021/09/22 08:17

Me.Shapes(shpName) を Worksheets("Sheet1").Shapes(shpName) とするのはどうでしょう。
texDL

2021/09/26 23:20

お返事遅くなって申し訳ございません。 ここでワークシートを指定できるのですね。 応用もできそうです。 今回は大変お世話になりました。 また教えていただくことがあるかもしれませんが、その時はよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問