前回に引き続いてオートシェイプを VBA で制御します。今回は FillFormat オブジェクトの ForeColor プロパティで前景色を指定する方法を学びます。
【VBA】FillFormatオブジェクトとForeColorプロパティ
前回記事『ShapesコレクションとAddShapeメソッド』 で作ったマクロで1回玉を表示させてから以下のマクロを実行すると、ランダムに色が塗られます。
'[VBA]ForeColorのサンプルコード Sub Fill_RGB() Dim rd As Integer Randomize rd = Int(3 * RND + 1) '図形を選択 ActiveSheet.Shapes(1).Select '選んだ図形の前景色に対し以下の操作を実行する With Selection.ShapeRange.Fill.ForeColor Select Case rd 'rd=1ならば前景色を赤で塗る Case Is = 1 .RGB = RGB(255, 0, 0) 'rd=2ならば前景色を青で塗る Case Is = 2 .RGB = RGB(0, 0, 255) 'rd=3ならば前景色を緑で塗る Case Is = 3 .RGB = RGB(0, 255, 0) End Select End With End Sub
Fill_RGB() を実行する度に色が無作為に変わっていくことを確認してください。
Fill_RGB() のコードを簡単に解説します。1 ~ 3 の乱数を発生させたあとに、
ActiveSheet.Shapes(1).Select
というコードで Shapes コレクションの中から(今は1つしかないはずですが)インデックス番号 1 の図形、つまり円を選択します。
With ステートメントと Select Case ステートメントを入れ子にして塗りつぶしの色を定めます。 With と End With で囲まれた部分は同じオブジェクトやプロパティに対する処理であり、
With Selection.ShapeRange.Fill.ForeColor
という記述は選んだ図形の ShapeRange オブジェクト、FillFormatオブジェクト(塗り潰しの書式設定)を順に得て、ForeColor プロパティ(前景色)に関して以降の処理をしなさいという意味になります。ただし Select Case ステートメントで無作為に決められた rd = 1, 2, 3 に対応して赤/青/緑に塗り潰します。色指定は RGB 、つまり「赤 (Red) 、緑 (Green) 、青 (Blue) 」の比率を指定する方式で、
.RGB = RGB(255, 0, 0)
であれば、赤色成分を最大数値 255 に、その他の色成分を 0 にしているので、原色の「赤」となります。
エクセルや数学に関するコメントをお寄せください