[[20160421134642]] 『図形のグラデーションをセルの値で可変したいので』(sato) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『図形のグラデーションをセルの値で可変したいのですが・・・』(sato)

いつもお世話になります。

表題のとおり、図形を2色のグラデーションで配置しています。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

    ActiveSheet.Shapes.Range(Array("Rectangle 12")).Select
    With Selection.ShapeRange.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .BackColor.RGB = RGB(255, 250, 250)
        .TwoColorGradient msoGradientVertical, 1
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

これのグラデーションの分岐点をシートのセルの値に応じて
色を変えたい【RGB(255,0,0)】〜【RGB(255,250,250)】のですが、

?@グラデーションの分岐点を取り扱うコードがわかりません。

色の値には「変数」【RGB(255,color,color)のような】を使っても
(もし使えるなら)
セルの値【RGB(255,Range("セル値").Value,Range("セル値").Valueみたいな】を使ってもかまいません。

どのようにしたらいいでしょうか?

< 使用 Excel:unknown、使用 OS:Windows7 >


すみません、EXCELはEXCEL2013を使用しています。
(sato) 2016/04/21(木) 14:04

 xl2013 なら以下が参考になりませんか。

http://q.hatena.ne.jp/1341606719

(β) 2016/04/21(木) 14:14


β様

ありがとうございます。

ご記載のリンクはこの件を調べているときに出てきたページなんですが、

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Sub macro()

    Dim sp As Shape
    Set sp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 90, 90, 90, 80)
    With sp.Fill
        .ForeColor.RGB = RGB(0, 128, 128)
        .OneColorGradient msoGradientHorizontal, 1, 1
        .GradientStops.Insert RGB(255, 0, 0), 0
        .GradientStops.Insert RGB(0, 255, 0), 0.5
        .GradientStops.Insert RGB(0, 0, 255), 0.99
    End With
End Sub
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

上記コードの【 .GradientStops.Insert RGB(255, 0, 0), 0】の
「insert」はグラデーションの分岐点を挿入だと思うんですが、
既存の図でグラデーションの分岐点を操作したい場合は「Item()」とあるのですが、
どう変更してもエラーがでます。
コードの書き方の問題かもしれませんが、リファレンス等を見ても解決しない状況です。
(sato) 2016/04/21(木) 16:24


えっと、分岐点しっかり指定しているように見えますが?
ただし、0 0.5 0.99 なので、1つ目の分岐点は無いのと同様で、3つ目の分岐点はほとんど最後に近いからこれも無いのと同様では?
(???) 2016/04/21(木) 16:46

???様

ご回答ありがとうございます。

おっしゃるとおり、上記のコードで分岐点は表示されます。
ただし、これを実行して、図が出た後に分岐点の位置を変更したい場合ですが、

β様のリンクでは、
.GradientStops.Insert RGB(255, 0, 0), 0
の「.Insert」を「Item()」か「Items()」にすれば、分岐点の位置が変更できる
みたいなことが書かれているんですが、

.GradientStops.Item(1) RGB(255, 0, 0), 0 と書いても
.GradientStops.Item(1) = RGB(255, 0, 0), 0 と書いても
.GradientStops.Item(1) RGB(255, 0, 0) と書いても
.GradientStops.Item(1) = RGB(255, 0, 0), 0 と書いても

エラーが出て表示されないんです。

(sato) 2016/04/21(木) 17:01


そういう話なら、こんな感じでしょうか?

        .GradientStops.Item(1).Color.RGB = RGB(0, 0, 255)
        .GradientStops.Item(2).Color.RGB = RGB(0, 0, 128)
        .GradientStops.Item(3).Color.RGB = RGB(0, 0, 32)
(???) 2016/04/21(木) 17:12

あ、変えるのは分岐点でしたっけか。

        .GradientStops.Item(1).Position = 0.2
        .GradientStops.Item(2).Position = 0.4
        .GradientStops.Item(3).Position = 0.6
(???) 2016/04/21(木) 17:16

もひとつ注意。Insertする前から、デフォルトでItemが2つ入っていますので、3つ追加すると5つになっちゃいます。
なので、3つInsertした後に、.GradientStops.Delete 1 を2回行って元の2つを削除するか、元の2つも流用して、Insertは1回にしましょう。
(???) 2016/04/21(木) 17:20

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.