セルの背景色や文字色を条件によって自動で変える処理は、VBAマクロでとてもよく使われるテクニックです。ステータスに応じて行を色分けしたり、入力漏れのセルを目立たせたりと、応用範囲は多岐にわたります。この色の操作の中心になるのがInterior.ColorとFont.Color、そしてそこに指定するRGB関数です。
この記事では、Interior.ColorとRGB関数の基本的な使い方から、背景色・文字色の取得と設定、そして混同されやすいColorIndexとの違いまで、コピペしてすぐ使えるサンプルコードとあわせて解説します。
Interior.ColorとFont.Colorの基本
セルの背景色はInterior.Color、文字色はFont.Colorで操作します。どちらも色を数値(長整数値)で指定・取得するプロパティです。
Sub 背景色と文字色を設定する()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
With ws.Range("A1")
.Interior.Color = RGB(255, 255, 0) ' 背景色:黄色
.Font.Color = RGB(255, 0, 0) ' 文字色:赤色
End With
End Sub
色そのものを直接数値で指定することもできますが、直感的に分かりやすいのは次に紹介するRGB関数を使う方法です。
RGB関数の仕組み
RGB関数は、赤(Red)・緑(Green)・青(Blue)の3つの値(それぞれ0〜255)を組み合わせて色を作る関数です。
RGB(赤の値, 緑の値, 青の値)
代表的な色の組み合わせは以下の通りです。
Sub 代表的な色の例()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
ws.Range("A1").Interior.Color = RGB(255, 0, 0) ' 赤
ws.Range("A2").Interior.Color = RGB(0, 176, 80) ' 緑
ws.Range("A3").Interior.Color = RGB(0, 112, 192) ' 青
ws.Range("A4").Interior.Color = RGB(255, 255, 0) ' 黄
ws.Range("A5").Interior.Color = RGB(255, 255, 255) ' 白
ws.Range("A6").Interior.Color = RGB(0, 0, 0) ' 黒
End Sub
Excelで実際にセルに色を付けてから「セルの書式設定」→「塗りつぶし」→「その他の色」でRGB値を確認すれば、好みの色をそのままコードに反映できます。
セルの色を条件によって自動で変える
実務でよくあるのが、セルの値に応じて背景色を自動的に変える処理です。ステータス管理表などに応用できます。
Sub ステータスに応じて色分けする()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("タスク一覧")
Dim 最終行 As Long
最終行 = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
Dim i As Long
For i = 2 To 最終行
Select Case ws.Cells(i, "B").Value
Case "完了"
ws.Cells(i, "B").Interior.Color = RGB(198, 239, 206) ' 薄緑
Case "対応中"
ws.Cells(i, "B").Interior.Color = RGB(255, 235, 156) ' 薄黄
Case "未対応"
ws.Cells(i, "B").Interior.Color = RGB(255, 199, 206) ' 薄赤
Case Else
ws.Cells(i, "B").Interior.ColorIndex = xlColorIndexNone ' 色なし
End Select
Next i
End Sub
色を解除したい場合はInterior.ColorIndex = xlColorIndexNoneを使います。Interior.Colorに白(RGB(255, 255, 255))を設定するのとは異なり、「塗りつぶしなし」の状態に戻せる点がポイントです。
セルの色を取得する方法
すでに設定されている色を調べたいときは、Interior.Colorをそのまま読み取ります。
Sub セルの色を取得する()
Dim 現在の色 As Long
現在の色 = ThisWorkbook.Worksheets("Sheet1").Range("A1").Interior.Color
MsgBox "A1セルの背景色コードは " & 現在の色 & " です"
End Sub
取得した数値を別のセルにそのままコピーしたい場合は、次のようにInterior.Color同士を代入すれば、色の判定やRGB分解をしなくてもそのまま反映できます。
Sub 色をコピーする()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
ws.Range("B1").Interior.Color = ws.Range("A1").Interior.Color
End Sub
Interior.ColorとColorIndexの違い
古いコードや解説記事ではInterior.ColorIndexという似たプロパティを見かけることがありますが、両者は仕組みがまったく異なります。
- Interior.Color:RGB関数などで指定した任意の色(1677万色)を扱える
- Interior.ColorIndex:Excelにあらかじめ用意された56色のカラーパレット番号(0〜56)で色を指定する古い方式
現在のExcelでは色の自由度が高いInterior.Colorを使うのが基本です。ただし、色を完全に解除するxlColorIndexNoneだけはColorIndex側の定数を使う点に注意してください。
まとめ
Interior.ColorとRGB関数を使えば、セルの背景色や文字色をマクロから自由自在にコントロールできます。ポイントをまとめると以下の通りです。
- 背景色は
Interior.Color、文字色はFont.Colorで操作する - 色の指定には
RGB(赤, 緑, 青)を使うと直感的で分かりやすい - 色を完全に解除するときは
Interior.ColorIndex = xlColorIndexNoneを使う - 色の取得・コピーもプロパティの読み書きだけで簡単に行える
条件によってセルの色を自動で変えられるようになると、進捗管理表やチェックリストなど、見た目にも分かりやすいマクロが作れるようになります。ぜひ実務のマクロに取り入れてみてください。


コメント