[VBA] FillFormat, ForeColorで前景色を指定する

 前回に引き続いてオートシェイプを 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() を実行する度に色が無作為に変わっていくことを確認してください。

 VBAで円の色を変える

 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 にしているので、原色の「赤」となります。

【次の記事】≫平面格子ランダムウォーク

エクセルや数学に関するコメントをお寄せください