1341606719 EXCEL VBAでグラデーション付図形を作成したい

EXCEL2007のVBAで、グラデーション付図形を作成したいです。
添付画像に示すように、グラデーションの分岐点が3つあり、赤→緑→青とグラデーションする図形が希望です。

図形作成するところ(AddShape)はわかりましたが、図形のFillObjectに対して3点分岐グラデーションの指定する記述がわかりません。

なお、実現できないという回答は不要ですので無効回答として扱います。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2012/07/09 18:39:35
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント100pt

Excel2010で試していますが、2007以降ならできるかと思います。

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

※ わざわざShapeオブジェクトに代入してるのはインテリセンスを使う為で特に意味はありません。

GradientStopsというのが分岐点で分岐点1ならGradientStops.Items(1)で取得できるかと思います。
引数の1番目が色で、2番めが位置なのですが、1だとうまくいかなかったので0.99にしています。
 
http://msdn.microsoft.com/en-us/library/ff863159.aspx

id:poppyday

ご提示ありがとうございました。ホント助かります^^

例示のコードですと、分岐点が5つになります(OneColorGradientで分岐点が2つ生成されます)ので、このあとにGradientStops.Delete 1を2つ追加することで所望の結果となりました。

また、0.99を1#と記述することで100%位置になりました。

2012/07/09 20:26:08
id:SALINGER

なるほど

2012/07/10 13:42:42

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません