セルの背景色を判定・変更する方法! 条件に応じた色分けをVBAで実現 | EXCELトピックス

スポンサーリンク
スポンサーリンク

セルの背景色を条件に応じて取得・変更する方法

Excel VBAを使用すると、セルの背景色を取得・変更し、条件に応じた処理を実行することができます。例えば、特定の色を持つセルを判定し、異なる処理を実行したり、数値に応じて自動でセルの色を変えたりできます。

以下では、Excelの疑似テーブルを使って具体的に解説します。

VBAの作成と実行

  1. VBAは、[開発]→[VisualBasic]→[挿入]→[標準モジュール]→コードを貼り付け の順で作成します。
  2. 実行する際は、対象のセルを選択し、[開発]→[マクロ]→実行したいマクロ名を選択して実行します。

Excelの代表的標準カラー(RGB形式)一覧

ExcelのVBAでは、カラーを RGB形式 で指定します。以下は、一般的に使用されるExcelの文字色とそのRGB値の対応表です。

RGB値 RGB値
■ 黒 RGB(0,0,0) ■ 水色 RGB(0,255,255)
■ 白 RGB(255,255,255) ■ 灰色 RGB(128,128,128)
■ 赤 RGB(255,0,0) ■ 濃い灰色 RGB(64,64,64)
■ 青 RGB(0,0,255) ■ 薄い灰色 RGB(192,192,192)
■ 緑 RGB(0,128,0) ■ 濃い青 RGB(0,0,128)
■ 黄色 RGB(255,255,0) ■ 濃い緑 RGB(0,100,0)
■ 紫 RGB(128,0,128) ■ 金色 RGB(255,215,0)
■ オレンジ RGB(255,165,0) ■ 銀色 RGB(192,192,192)
■ ピンク RGB(255,192,203)

セルの背景色を取得する

選択範囲のセルの背景色を取得するVBAコードを紹介します。

  A B C
1 値あり 警告 安全
2 重要
Sub GetSelectedCellColors()
    Dim cell As Range
    Dim result As String
    
    ' 選択範囲の各セルの色を取得
    For Each cell In Selection
        result = result & "セル " & cell.Address & " の背景色(RGB値): " & cell.Interior.Color & vbCrLf
    Next cell
    
    ' 取得した色をメッセージボックスで表示
    MsgBox result, vbInformation, "セルの背景色情報"
End Sub

解説:

  • Selection を使用し、ユーザーが選択したセルを処理。
  • For Each ループを使って、選択範囲内のすべてのセルの背景色を取得。
  • MsgBox で取得した背景色(RGB値)を表示。

背景色を判定して処理を分岐する

次に、セルの背景色が赤・黄色・緑のいずれかの場合に、それぞれ異なるメッセージを表示するVBAコードを紹介します。

  A B C
1 危険 注意 安全
Sub CheckSelectedCellColors()
    Dim cell As Range
    Dim result As String
    
    For Each cell In Selection
        Select Case cell.Interior.Color
            Case RGB(255, 0, 0) ' 赤
                result = result & "セル " & cell.Address & " は警告 (赤)" & vbCrLf
            Case RGB(255, 255, 0) ' 黄色
                result = result & "セル " & cell.Address & " は注意 (黄色)" & vbCrLf
            Case RGB(0, 255, 0) ' 緑
                result = result & "セル " & cell.Address & " は安全 (緑)" & vbCrLf
            Case Else
                result = result & "セル " & cell.Address & " は未定義の色" & vbCrLf
        End Select
    Next cell
    
    MsgBox result, vbInformation, "セルの背景色判定"
End Sub

解説:

  • 選択範囲の各セルの背景色を判定し、指定のRGB値と比較。
  • 色ごとに異なるメッセージを表示(例:赤=警告、黄色=注意、緑=安全)。
  • 該当しない色は「未定義の色」として処理。

選択範囲のセルの値に応じて背景色を変更する

  • 100以上 → 緑
  • 50以上100未満 → 黄色
  • 50未満 → 赤

適用後のExcelの状態は以下のようになります。

  A B
1 120 75
2 30 110
Sub ChangeSelectedCellsColor()
    Dim cell As Range
    
    ' 選択範囲のセルを順番に処理
    For Each cell In Selection
        If IsNumeric(cell.Value) Then ' 数値の場合のみ処理
            If cell.Value >= 100 Then
                cell.Interior.Color = RGB(0, 255, 0) ' 緑
            ElseIf cell.Value >= 50 Then
                cell.Interior.Color = RGB(255, 255, 0) ' 黄色
            Else
                cell.Interior.Color = RGB(255, 0, 0) ' 赤
            End If
        End If
    Next cell
End Sub

解説:

  • For Each cell In Selection を使用し、選択範囲のすべてのセルを処理。
  • IsNumeric(cell.Value) で、セルの値が数値かどうかを判定。
  • 100以上 → 緑、50以上100未満 → 黄色、50未満 → 赤 に色を変更。
  • 選択範囲のすべてのセルが対象になるため、広範囲のデータにも適用可能。

セルの値に応じて背景色を変更する方法(条件付き書式)

Excelの「条件付き書式」機能を使えば、VBAを使用せずに、セルの値に応じて自動的に背景色を変更できます。

  1. 値に応じて色を変更したいセル範囲(例:A1:B10)を選択する。
  2. Excelの「ホーム」タブを開き、「条件付き書式」をクリックする。
  3. 表示されたメニューから「新しいルール」を選択する。
  4. 「ルールの種類の選択」画面で「数式を使用して、書式設定するセルを決定」を選択する。
  5. 「次の数式を満たす場合に値を書式設定」欄に、以下の数式(100以上の場合)を入力する:
    • =A1>=100
  6. 「書式」ボタンをクリックし、「塗りつぶし」タブで適用したい背景色を選択する。
  7. 他の分岐についても同様に設定する:
    • 50以上100未満の場合:=AND(A1>=50, A1<100)
    • 50未満の場合:=A1<50
  8. 「OK」をクリックして条件付き書式を確定し、ダイアログを閉じる。
  A B
1 120 75
2 30 110

まとめ

  • 選択範囲の背景色を取得するには、For Each ループを使用。
  • 取得した色のRGB値を判定し、処理を分岐できる。
  • セルの値に応じて背景色を変更するには、条件を設定して Interior.Color を変更。
  • 選択範囲の背景色をクリアするには、Interior.ColorIndex = xlNone を使用。