皆さんこんにちは。ベテランExcel VBA講師です。日々の業務で、会議資料の図形を一つひとつ手作業で色塗りしていませんか?「あの青色」を毎回スポイトで探す時間は、実は非常に大きな損失です。今回は、VBAを使って図形の色を瞬時に制御し、資料のクオリティを均一化する実務テクニックを解説します。
なぜ「手動の塗りつぶし」がリスクなのか
実務において「図形の色」は、単なる装飾ではありません。会社指定のブランドカラーや、資料の重要度を示すシグナルです。手動で色を変えていると、微妙な色味のズレ(RGB値のわずかな違い)が発生し、プロフェッショナルな資料に見えなくなります。VBAを使えば、特定のRGB値を固定して適用できるため、常に「正しい色」を担保できます。
図形の色をコードで操る基本
VBAで図形の色を変更するには、ShapeオブジェクトのFillプロパティを使用します。まずは、アクティブなシート上のすべての図形を、企業のコーポレートカラー(例:RGB(0, 51, 102))に染める基本コードを見てみましょう。
Sub SetShapeColor()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
‘ 図形が塗りつぶし可能か判定
If shp.Fill.Visible = msoTrue Then
shp.Fill.ForeColor.RGB = RGB(0, 51, 102)
End If
Next shp
End Sub
実務での応用:特定の図形だけを塗り分ける
実務では「すべての図形」を一括で染めると困る場面も多いはずです。例えば、「ステータス」という名前が含まれる図形だけを、特定の条件で色分けしたい場合は、If文で名前を判定するのが定石です。
Sub ColorStatusShapes()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
If shp.Name Like “ステータス” Then
‘ 完了なら緑、未完了なら赤にする分岐
If shp.TextFrame2.TextRange.Text = “完了” Then
shp.Fill.ForeColor.RGB = RGB(0, 176, 80)
Else
shp.Fill.ForeColor.RGB = RGB(255, 0, 0)
End If
End If
Next shp
End Sub
講師からのアドバイス:定数化のススメ
実務でこのコードを運用する際は、RGB値をコード内に直書きせず、定数(Const)としてモジュールの先頭に定義しておくことを強く推奨します。「来月からコーポレートカラーが変わった」という場合でも、定数を一箇所書き換えるだけで全マクロが対応できるからです。
VBAは、単なる自動化ツールではありません。資料の「品質基準」をコードで固定する、いわば「組織のルールを自動化する仕組み」なのです。ぜひ、皆さんの現場のテンプレートにこのロジックを組み込んでみてください。次回は、図形の「枠線」や「透明度」まで一括制御するテクニックを深掘りします。お楽しみに。
