Excel VBA 質問スレッド №2103 (解決済)
図形の色変更について
投稿者 : あやぱぱ 投稿日時 : 2025/04/02(Wed) 09:38:23 OS : 未指定 EXCEL : 未指定
初心者です、よろしくお願いします。
セルO43とO44の数値の大きさにより二つある図形(矢印)の色を変えたいのですが上手くいきません。
O43の方が大きい場合は[矢1]を白色にして見えなくし、[矢2]は黒色にする。
044の方が大きい場合は逆にしたいです。
下が色々調べながら書いたコードですが、全く動きません。
ご教授お願い言い足します。
初心者です、よろしくお願いします。
セルO43とO44の数値の大きさにより二つある図形(矢印)の色を変えたいのですが上手くいきません。
O43の方が大きい場合は[矢1]を白色にして見えなくし、[矢2]は黒色にする。
044の方が大きい場合は逆にしたいです。
下が色々調べながら書いたコードですが、全く動きません。
ご教授お願い言い足します。
Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False If Range("O43").Value - Range("O44").Value > 0 Then ActiveSheet.Shapes.Range(Array("矢1")).Select With Selection.ShapeRange.Line.ForeColor.ObjectThemeColor = msoThemeColorBackground1 End With ActiveSheet.Shapes.Range(Array("矢2")).Select With Selection.ShapeRange.Line.ForeColor.ObjectThemeColor = msoThemeColorDark1 End With End If If Range("O43").Value - Range("O44").Value < 0 Then ActiveSheet.Shapes.Range(Array("矢2")).Select With Selection.ShapeRange.Line.ForeColor.ObjectThemeColor = msoThemeColorBackground1 End With ActiveSheet.Shapes.Range(Array("矢1")).Select With Selection.ShapeRange.Line.ForeColor.ObjectThemeColor = msoThemeColorDark1 End With End If Range("O41").Select End Sub
スポンサーリンク
[返信 1] Re : 図形の色変更について
投稿者 : さんこう 投稿日時 : 2025/04/02(Wed) 09:46:26
>下が色々調べながら書いたコードですが、全く動きません。
動いているとおもいますが、色を変えるコードが存在しないので希望する動作になっていないのでしょう。
>下が色々調べながら書いたコードですが、全く動きません。
動いているとおもいますが、色を変えるコードが存在しないので希望する動作になっていないのでしょう。
[返信 2] Re : 図形の色変更について
投稿者 : tek 投稿日時 : 2025/04/02(Wed) 14:43:46
>下が色々調べながら書いたコードですが、全く動きません。
> With Selection.ShapeRange.Line.ForeColor.ObjectThemeColor = msoThemeColorBackground1
> End With
興味があるので教えてください。上記のコード何を参考にしましたか?
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/with-statement
>Withobject [ statements ] End With
とありますが、
通常は
With object
[ statements ]
End With
と使います。
例えば、以下の例ではエラーにはなりませんが、セルA1の値は"a"のままで"B"にはなりません。
Range("A1").Value = "B" は
ユーザー定義型でもオブジェクトでもないので
"."と打ってもインテリセンス候補は何も出ません。
なぜなのかは、Copilotに聞いてみると以下のことを教えてくれます。
1. 式の評価とWith構文の適用範囲:
2. なぜエラーにならないか:
3. 設計上の注意点:
>下が色々調べながら書いたコードですが、全く動きません。
> With Selection.ShapeRange.Line.ForeColor.ObjectThemeColor = msoThemeColorBackground1
> End With
興味があるので教えてください。上記のコード何を参考にしましたか?
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/with-statement
>Withobject [ statements ] End With
とありますが、
通常は
With object
[ statements ]
End With
と使います。
例えば、以下の例ではエラーにはなりませんが、セルA1の値は"a"のままで"B"にはなりません。
Sub sumple() Range("A1").Value = "a" With Range("A1").Value = "B" ' . 'と打ってもなにも候補が出ない Debug.Print Range("A1").Value End With End Sub
Range("A1").Value = "B" は
ユーザー定義型でもオブジェクトでもないので
"."と打ってもインテリセンス候補は何も出ません。
なぜなのかは、Copilotに聞いてみると以下のことを教えてくれます。
1. 式の評価とWith構文の適用範囲:
2. なぜエラーにならないか:
3. 設計上の注意点:
[返信 3] Re : 図形の色変更について
投稿者 : あやぱぱ 投稿日時 : 2025/04/02(Wed) 23:37:01
お二人大変ありがとうございます。
仰っている意味さえ解らないど素人で恐縮です。
コードは検索にヒットしたマクロコードのhpからが主です。
自分で書いてみたら多くが改行部分でエラーだらけになり、
行をまとめたり入れ替えたりして、やっとエラーにならなくなったコードがこれです。
基本が出来ていないので進みません。
お二人大変ありがとうございます。
仰っている意味さえ解らないど素人で恐縮です。
コードは検索にヒットしたマクロコードのhpからが主です。
自分で書いてみたら多くが改行部分でエラーだらけになり、
行をまとめたり入れ替えたりして、やっとエラーにならなくなったコードがこれです。
基本が出来ていないので進みません。
[返信 4] Re : 図形の色変更について
投稿者 : てらてら 投稿日時 : 2025/04/03(Thu) 07:01:59
こんにちは。
参考にしてみてください。
ちなみに、Withを使わずに、以下のようにも書けます。(With内が1行だから)
ActiveSheet.Shapes.Range(Array("矢印1")).Fill.ForeColor.ObjectThemeColor = msoThemeColorText1
Withを使えば、他のオプションも省略して書けるので便利という話。
こんにちは。
参考にしてみてください。
ちなみに、Withを使わずに、以下のようにも書けます。(With内が1行だから)
ActiveSheet.Shapes.Range(Array("矢印1")).Fill.ForeColor.ObjectThemeColor = msoThemeColorText1
Withを使えば、他のオプションも省略して書けるので便利という話。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("O43") > Range("O44") Then With ActiveSheet.Shapes.Range(Array("矢印1")).Fill .ForeColor.ObjectThemeColor = msoThemeColorText1 End With With ActiveSheet.Shapes.Range(Array("矢印2")).Fill .ForeColor.ObjectThemeColor = msoThemeColorBackground1 End With Else With ActiveSheet.Shapes.Range(Array("矢印2")).Fill .ForeColor.ObjectThemeColor = msoThemeColorText1 End With With ActiveSheet.Shapes.Range(Array("矢印1")).Fill .ForeColor.ObjectThemeColor = msoThemeColorBackground1 End With End If End Sub
[返信 5] Re : 図形の色変更について
投稿者 : tek 投稿日時 : 2025/04/03(Thu) 09:50:43
回答ありがとうございます。
With a = b
End With
などと紹介しているページは無かったと解釈いたします。
以下参考にしてください。
>O43の方が大きい場合は[矢1]を白色にして見えなくし、[矢2]は黒色にする。
>044の方が大きい場合は逆にしたいです。
テーマ色はまず変えることが無いと思われますので、ObjectThemeColorを変える方法もあり得るでしょうが、
見えなくするのであれば、白色にすると枠線が設定されている場合は線が交差する枠線が消えますので見えなく(Visible=false)し、
黒色はRGB指定の方が合理的と私は思います。一旦黒にするに一回実行しておきます。
回答ありがとうございます。
With a = b
End With
などと紹介しているページは無かったと解釈いたします。
以下参考にしてください。
>O43の方が大きい場合は[矢1]を白色にして見えなくし、[矢2]は黒色にする。
>044の方が大きい場合は逆にしたいです。
テーマ色はまず変えることが無いと思われますので、ObjectThemeColorを変える方法もあり得るでしょうが、
見えなくするのであれば、白色にすると枠線が設定されている場合は線が交差する枠線が消えますので見えなく(Visible=false)し、
黒色はRGB指定の方が合理的と私は思います。一旦黒にするに一回実行しておきます。
Private Sub Worksheet_Change(ByVal Target As Range) 'もし該当セルが変っていないのであれば抜けさせます。いや他のセルの変更でも色変更するんだよの場合は削除 If Intersect(Me.Range("o43:o44"), Target) Is Nothing Then Exit Sub ' Application.ScreenUpdating = False 'この程度であれば画面更新をon/offするのは無駄です Select Case Me.Range("o43").Value - Me.Range("o44").Value Case Is > 0 ', Is = 0 'イコールの場合の処置をどちらかにする場合はどちらかで有効にする Me.Shapes("矢1").Visible = msoCTrue Me.Shapes("矢2").Visible = msoFalse Case Is < 0 Me.Shapes("矢2").Visible = msoCTrue Me.Shapes("矢1").Visible = msoFalse ' Case Is = 0 'イコールの場合の処置が異なる場合はここに書く ' Me.Shapes("矢1").Visible = msoCTrue ' Me.Shapes("矢2").Visible = msoCTrue End Select ' Application.ScreenUpdating = true '画面更新をoffしたのであれば必ずonに戻してください End Sub Sub 一旦黒にする() Me.Shapes("矢1").Line.ForeColor.RGB = vbBlack Me.Shapes("矢2").Line.ForeColor.RGB = vbBlack End Sub
[返信 6] Re : 図形の色変更について
投稿者 : あやぱぱ 投稿日時 : 2025/04/04(Fri) 08:13:06
お二人さま、大変ありがとうございます。
てらてらさんのは、
「指定された値は境界を超えています」となり、
'.ForeColor.ObjectThemeColor = msoThemeColorText1
のところでエラーになりました。
tekさんのは最初白(見えなくなる)になりましたが、
一旦黒にする、でその後問題なく動きました。
お二人のコードを参考に勉強します。
素人相手にありがとうございました。
解決とさせていただきます。
お二人さま、大変ありがとうございます。
てらてらさんのは、
「指定された値は境界を超えています」となり、
'.ForeColor.ObjectThemeColor = msoThemeColorText1
のところでエラーになりました。
tekさんのは最初白(見えなくなる)になりましたが、
一旦黒にする、でその後問題なく動きました。
お二人のコードを参考に勉強します。
素人相手にありがとうございました。
解決とさせていただきます。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-09-14 15:50:50 )