Excel VBA 数学教室ではアフィリエイトプログラムを利用して商品を紹介しています。

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

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