【ExcelVBA・マクロ】Interior.ColorとRGB関数の使い方|セルの背景色・フォント色を自由に操作する方法【コピペOK】

ExcelVBA

セルの背景色や文字色を条件によって自動で変える処理は、VBAマクロでとてもよく使われるテクニックです。ステータスに応じて行を色分けしたり、入力漏れのセルを目立たせたりと、応用範囲は多岐にわたります。この色の操作の中心になるのがInterior.ColorFont.Color、そしてそこに指定するRGB関数です。

この記事では、Interior.ColorRGB関数の基本的な使い方から、背景色・文字色の取得と設定、そして混同されやすい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.ColorRGB関数を使えば、セルの背景色や文字色をマクロから自由自在にコントロールできます。ポイントをまとめると以下の通りです。

  • 背景色はInterior.Color、文字色はFont.Colorで操作する
  • 色の指定にはRGB(赤, 緑, 青)を使うと直感的で分かりやすい
  • 色を完全に解除するときはInterior.ColorIndex = xlColorIndexNoneを使う
  • 色の取得・コピーもプロパティの読み書きだけで簡単に行える

条件によってセルの色を自動で変えられるようになると、進捗管理表やチェックリストなど、見た目にも分かりやすいマクロが作れるようになります。ぜひ実務のマクロに取り入れてみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました