[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『図形の色を数値により変化させたい』(とも)
オートシェイプで作った図形の色を、 あるセルに入った数値を見て変化させたいのですが 出来ますか??
例えば・・・ 図形1はA1の数値をみる。 図形2はA2の数値をみる。 それぞれの図形を数値が50以上なら赤、100以上なら青、150以上なら黒 とかにしたいのですが。。。
私の知識では無理なので、誰か分かる方がいらっしゃったら 教えて下さいm(>_<)m
マクロを使えば可能ですので、ひとまず作ってみました。
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address(0, 0) Case "A1" ActiveSheet.Shapes("図形1").Select Case "A2" ActiveSheet.Shapes("図形2").Select Case Else Exit Sub End Select
Select Case Target.Value Case Is >= 150 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 8 Case Is >= 100 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 12 Case Is >= 50 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10 End Select
Target.Select End Sub
(INA)
確認が遅くなりました(>_<) できました!!ありがとうございますξξ *´▽`)ノ
あと質問があるのですが、"図形1"の部分はどこをみれば分かりますか?? とりあえず"Freeform 2"に変えてやったら出来たのですが、 その図形が Freeform の何番かって言うのはどこで確認できますでしょうか?? 教えて下さいm(._.)m
(とも)
(INA)さんのマクロを参考に以下のように作ってみました!
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address(0, 0) Case "C2" ActiveSheet.Shapes("Freeform 3").Select Case "C3" ActiveSheet.Shapes("Freeform 4").Select Case "C4" ActiveSheet.Shapes("Freeform 5").Select Case "C5" ActiveSheet.Shapes("Freeform 6").Select Case "C6" ActiveSheet.Shapes("Freeform 7").Select Case "C7" ActiveSheet.Shapes("Freeform 8").Select Case "C8" ActiveSheet.Shapes("Freeform 9").Select Case "C9" ActiveSheet.Shapes("Freeform 10").Select Case "C10" ActiveSheet.Shapes("Freeform 11").Select Case "C11" ActiveSheet.Shapes("Freeform 12").Select Case "C12" ActiveSheet.Shapes("Freeform 13").Select Case "C13" ActiveSheet.Shapes("Freeform 14").Select Case "C14" ActiveSheet.Shapes("Freeform 15").Select Case Else Exit Sub End Select
Select Case Target.Value Case Is >= 0.05 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 13 Selection.ShapeRange.Fill.Transparency = 0.65 Case Is >= 0.1 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 11 Selection.ShapeRange.Fill.Transparency = 0.65 Case Is >= 0.15 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10 Selection.ShapeRange.Fill.Transparency = 0.65 Case Is >= 0.2 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 12 Selection.ShapeRange.Fill.Transparency = 0.65 Case Is >= 0.25 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 53 Selection.ShapeRange.Fill.Transparency = 0.65 Case Is >= 0.3 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 14 Selection.ShapeRange.Fill.Transparency = 0.65 End Select
Target.Select End Sub
しかし、これだとどんな数字を入れても(0.05以下を除く) 0.05以上の時の設定色(黄色)にしか変わってくれないのですが どうしたらよいのでしょうか?? ホント初心者で申し訳ないです(>_<)
(とも)
聞く順序を逆にしてください。
Select Case Target.Value Case Is >= 0.3 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 14 Selection.ShapeRange.Fill.Transparency = 0.65 Case Is >= 0.25 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 53 Selection.ShapeRange.Fill.Transparency = 0.65 Case Is >= 0.2 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 12 Selection.ShapeRange.Fill.Transparency = 0.65 End Select .... Case Is >= 0.05 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 13 Selection.ShapeRange.Fill.Transparency = 0.65 End Select
(kazu)
(゚〇゚;)・・・なるほど・・・ まぬけ感たっぷりな質問でしたね。普通に考えたら分かりそうなものを(p_-) すいませんでした!kazuさんありがとうございます! (とも)
あ・・と、数値が入るセルは計算させてるんですね。 =A1/B1 という式が入ってて、その計算結果で図形の色を変えたいのです。 A1とB1に数値を入れるとC1に結果が出ますが、 図形の色は変わってくれないのですが、、、どうしたらよいでしょうか? 一度セルをダブルクリックしてエンターすると変わってくれるのですが・・・ マクロ難しいです(>_<) (とも)
>その計算結果で図形の色を変えたいのです。 Worksheet_Calculate イベントにしては如何でしょうか?
(INA)
「計算が終わったとき」ってことですよね? 変えてみたのですが、A1に数字を入れた時点で 「オブジェクトが必要です」 というエラーが出てくるのですが、どうしたらよいのでしょうか(´;-;`) ?? (とも)
changイベントで数式の元になっているセルをTargetにしては如何でしょうか?
(INA)
・・・すいません・・・ もうちょっと噛み砕いてお願いします(>_<)
Select Case Target.Address(0, 0) の部分を変えたら良いってことでしょうか?? しかしどう変えていいのか・・・ (とも)
>A1とB1に数値を入れるとC1に結果が出ますが、
であれば、 セル値が変化したときに対象にするセルは、A1, B1 として、値は C1 を基準にすればよいです。
Private Sub Worksheet_Change(ByVal Target As Range) '対象セル以外はマクロ終了 If Target.Column > 2 Or Target.Row <> 1 Then Exit Sub
Select Case Target.Address(0, 0) Case "A1" ActiveSheet.Shapes("図形1").Select Case "A2" ActiveSheet.Shapes("図形2").Select Case Else Exit Sub End Select
Select Case Range("C1").Value Case Is >= 150 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 8 Case Is >= 100 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 12 Case Is >= 50 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10 End Select
Target.Select End Sub
(INA)
考え方は分かりました! 実際には D2/C2=E2 としているのですが、、、
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 2 Or Target.Row <> 1 Then Exit Sub
Select Case Target.Address(0, 0) Case "D1" ActiveSheet.Shapes("図形1").Select Case "D2" ActiveSheet.Shapes("図形2").Select Case Else Exit Sub End Select
Select Case Range("E1").Value Case Is >= 150 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 8 Case Is >= 100 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 12 Case Is >= 50 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10 End Select
Target.Select End Sub
これでいいのでしょうか?! こう変えてみたのですが、全く色が変わってくれないのですが・・・ もっと勉強しなきゃ駄目ですね、すいませんm(_ _)m (とも)
> If Target.Column > 2 Or Target.Row <> 1 Then Exit Sub
これは変化したセルの 列が2以上 または 行が 1 以外のときは マクロを終了という意味です。
If Target.Column < 3 Or Target.Column > 4 Or Target.Row <> 2 Then Exit Sub
(INA)
・・・なんかどつぼハマってます・・・
If Target.Column < 3 Or Target.Column > 4 Or Target.Row <> 2 Then Exit Sub に変更するとE2を見ている図形は色変化してくれるのですが、 それ以外のセルを参照している図形は変化しません。
色変化させたい図形は全部で40個です。 図形が値を見に行くところはE2〜E41なんですね。 なので
If Target.Column < 3 Or Target.Column > 4 Or Target.Row > 2 Or Target.Row < 41 Then Exit Sub
になるのでしょうか?変えてみました また色が変わらなくなったんですが・・・(/_・、) 自分の知識のなさに泣けてきます。すいません。 (とも)
これまた、あまりよく見ていませんが、 ↓が参考になりませんか? (夏目雅子似) Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:A2, C1:C2")) Is Nothing Then Exit Sub
MsgBox "川に立ち 鮎の香りに 夏本番", vbInformation, _ "入選おめでとうございます。"
End Sub
ガ━━Σ(゚д゚lll)━━ン!!! 駄作発見!!(^_^A; (川野鮎太郎)
>図形が値を見に行くところはE2〜E41なんですね。 それらのセルには数式が入っているのですか?
(INA)
さっき↓こんな感じでやってみたら出来ましたけど、、
少し気になったのが、
>実際には D2/C2=E2 としているのですが、、、
なのに、
>Select Case Range("E1").Value ↑
あと、 >図形1はちゃんと選択されていますか?
一度マクロの記録で選択してみて確認してみるといいかも知れませんね。
余計なお世話かもしれませんが、ご参考までに。。。 (夏目雅子似)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("D1:D2")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Select Case Target.Address(0, 0) Case "D1" Me.Shapes("AutoShape 1").Select Case "D2" Me.Shapes("AutoShape 2").Select Case Else Application.EnableEvents = True Exit Sub End Select
Select Case Range("E2").Value Case Is >= 150 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 8 Case Is >= 100 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 12 Case Is >= 50 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10 End Select
Target.Offset(1).Select
Application.EnableEvents = True
End Sub
またまた確認が遅くなりすいませんm(_ _)m
>>図形が値を見に行くところはE2〜E41なんですね。 >それらのセルには数式が入っているのですか? 入っています。
A B C D E 2 100 15000 =C2/D2(150) 図形1 3 100 5000 =C3/D3( 50) 図形2 ・ ・ ・ 41 100 10000 =C41/D41(100) 図形41
と↑このようになっているのです。 (夏目雅子似)さんのを参考に下記のようにしてみましたが 色が変わらなくなってしまいました(T_T)(とも)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("D2:D3")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Select Case Target.Address(0, 0) Case "D2" ActiveSheet.Shapes("Freeform 1").Select Case "D3" ActiveSheet.Shapes("Freeform 2").Select Case Else Application.EnableEvents = True Exit Sub End Select
Select Case Range("E2").Value Case Is >= 150 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 8 Case Is >= 100 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 12 Case Is >= 50 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10 End Select
Target.Offset(1).Select
Application.EnableEvents = True
End Sub
数式が入っているなら Value プロパティでなく、 Text プロパティにしては如何ですか?
(INA)
衝突しましたぁ、、、 ありゃま、もう、完全に忘れていました。ごめんなさいm(__)m 少し、気になったのが =C2/D2 では、150にならないと思うのですが、 どうでしょう? 一応↓の様にしてみました。 D2,D3,D41に数値をいれて、E列の値を変化させて下さい。 エラーが途中で発生してイベントが無効になっていませんか? その様な場合は、一度違うシートを選択してから 当該シートを選択しなおしてから実行してみてください。 後は、適当に応用してください。 で、どうでしょう? (夏目雅子似)
Private Sub Worksheet_Activate() Application.EnableEvents = True End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim MyRow As Integer If Target.Count > 1 Then Exit Sub 'E2,E3,E41の値をD2,D3,D41で変えると仮定しています。 '従って、セルがD2,D3,D41の何れかにいないとイベントは発生しません。 If Intersect(Target, Range("D2:D3", "D41")) Is Nothing Then Exit Sub 'イベントを無効にします。 Application.EnableEvents = False 'ターゲトのアドレスによって選択する図形と参照するE列の行を決定します。 Select Case Target.Address(0, 0) 'ターゲットがD2の場合はオートシェイプの1を選択して '行に2を代入します。 Case "D2" ActiveSheet.Shapes("Rectangle 1").Select 'Rectangle 1は実際の図形を選択して MyRow = 2 'それを記録して確認してください。 'ターゲットがD3の場合はオートシェイプの2を選択して '行に3を代入します。 Case "D3" ActiveSheet.Shapes("Rectangle 2").Select 'Rectangle 2は実際の図形を選択して MyRow = 3 'それを記録して確認してください。 'ターゲットがD41の場合はオートシェイプの3を選択して '行に41を代入します。 Case "D41" ActiveSheet.Shapes("Rectangle 3").Select 'Rectangle 3は実際の図形を選択して MyRow = 41 'それを記録して確認してください。 Case Else Application.EnableEvents = True '必要ないと思いますが一応入れておきます。 Exit Sub End Select 'ターゲットのアドレスで選択する図形を決定して(図形はSelectionで表しています。) 'それに対応する行を変数MyRowで決定します。 Select Case Range("E" & MyRow).Value Case Is >= 150 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 8 Case Is >= 100 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 12 Case Is >= 50 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 7 End Select 'ターゲットの一つ下のセルを選択します。 Target.Offset(1).Select 'イベントを有効にします。 Application.EnableEvents = True End Sub
丁寧に説明していただいてありがとうございます!! 上記マクロを自分のエクセルに当てはめてみたところ、ちゃんと動きました!! どうもありがとうございますm(_ _)m!! みなさんありがとうございました! もっと勉強して理解を深めたいと思います(>_<) (とも)
お節介かもしれませんが、 Valueプロパティ と Textプロパティ の違いは理解しておいて下さいね。
(INA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.