VBAで自動化 VBA一覧 セル・見た目の操作 ビジュアル操作

【VBA】背景色の一覧と設定方法:Interiorオブジェクトの使用方法

Excel VBAで背景色を扱う場面は、想像以上に多くあります。
入力欄の強調、エラーセルの可視化、処理済みデータのマーキング、進捗管理表の色分けなど、「色」は業務ロジックを視覚的に補助する重要な要素です。

しかし実務では、

  • Interior.Color = 255 のような「数字だけのコード」が並び、後から意味がわからなくなる
  • ColorIndexColor が混在して保守不能になる
  • 条件分岐ごとに同じ色指定がコピペされ、修正漏れが起きる

といった“色指定マクロあるある”が頻発します。

この記事では、Interiorオブジェクトの基礎から応用までを整理しつつ、
「あとから読んでも理解できる」「流用しても壊れない」VBAコードの書き方を中心に解説します。

✅ ExcelVBAで背景色を扱うときに起きがちな失敗

背景色の指定は一見シンプルですが、実務では「後から修正が入る」「他人が触る」前提で書かないと、すぐに破綻します。特に多いのが、数値ベタ書きによる可読性の低下です。色の意味がコードから読み取れず、仕様書を探さないと判断できない状態になります。また、ColorIndexとRGB指定を混在させると、Excelのバージョン差やテーマ変更で見た目が変わり、想定外の色になることもあります。さらに、処理ロジックと色指定が密結合すると、業務ルール変更のたびに修正箇所が増え、保守コストが跳ね上がります。ここを整理せずに先へ進むと、後半の応用コードが「なぜそう書いているか」理解しづらくなるため、まず失敗パターンを把握しておきましょう。

・失敗例1:ColorIndexの多用で意味不明になる

ColorIndex = 3 と書かれても、それが赤なのか警告なのか、処理済みなのかはコードから判断できません。

・失敗例2:RGB値の直書きで保守不能

Interior.Color = RGB(255, 204, 204) が何を意味する色なのか、コメントなしでは伝わりません。


✅ Interiorオブジェクトの基本構造を理解する

Interiorオブジェクトは、セルやRangeの「塗りつぶし」を制御するためのオブジェクトです。背景色を扱う際は、このInteriorを正しく理解することがすべての前提になります。表面的な書き方だけ覚えてしまうと、応用時に必ず詰まります。ここでは、最低限押さえるべきプロパティを整理します。

・Interior.Color

RGB値で色を指定します。もっとも自由度が高く、実務ではこちらが主流になります。

・Interior.ColorIndex

Excelが用意しているカラーパレットの番号で指定します。
簡単ですが、テーマ変更や環境差に弱く、長期運用には不向きです。

・Interior.Pattern / PatternColor

通常の背景色指定ではあまり使いませんが、網掛けなど特殊な表現で使用します。


✅ なぜ実務ではColorIndexよりColorを使うのか

結論から言うと、保守性と再現性の問題です。ColorIndexは「そのExcel環境のパレット」に依存します。つまり、別PC・別テーマ・別バージョンで色味が変わる可能性があります。一方、RGB指定は常に同じ色を再現できます。

また、RGB指定は「色を意味で管理する」設計と相性が良く、後述する定数化・関数化がしやすくなります。


✅ 背景色を設定する最小コード(まずは基本)

ここでは、まず「最低限の書き方」を確認します。

Range("A1").Interior.Color = RGB(255, 255, 0)

このコードは動きます。しかし、実務コードとしては不十分です。

なぜ不十分か

  • なぜ黄色なのかがコードから読み取れない
  • 別の場所で同じ色を使うときにコピペが増える
  • 色変更時に修正漏れが起きやすい

ここから、実務向けの書き方へ進化させます。


✅ 背景色を「意味」で管理する(定数化)

なぜ定数化するのか

色は「見た目」ではなく「意味」で使われます。
例:入力欄、エラー、完了、注意、未処理など。

そのため、RGB値ではなく意味を名前に持たせる設計にします。

実務向けの定数定義例

Option Explicit

Public Const COLOR_INPUT As Long = RGB(255, 255, 204)   ' 入力欄
Public Const COLOR_ERROR As Long = RGB(255, 204, 204)   ' エラー
Public Const COLOR_DONE  As Long = RGB(204, 255, 204)   ' 処理済み

なぜこの書き方か

  • 色の意味が名前で一目瞭然
  • RGB値を一か所で管理できる
  • 別マクロでも再利用できる

使用例

Range("B2:D10").Interior.Color = COLOR_INPUT

✅ 背景色設定を関数化する(再利用性を高める)

同じ処理を何度も書くのは、実務では事故の元です。

関数化の例

Public Sub SetBackgroundColor(ByVal target As Range, ByVal bgColor As Long)
    target.Interior.Color = bgColor
End Sub

なぜ関数化するのか

  • 処理の責務を明確に分けられる
  • 将来、ログ出力や例外処理を追加しやすい
  • テスト・修正範囲を局所化できる

使用側コード

Call SetBackgroundColor(Range("A1:C5"), COLOR_ERROR)

✅ 条件によって背景色を変える(If文との組み合わせ)

実務で最も多いパターンです。

設計意図

  • 判定ロジックと色指定を分離する
  • 色は意味定数で指定する

サンプルコード

Public Sub ColorByValue()
    Dim c As Range
    
    For Each c In Range("A2:A20")
        If c.Value = "" Then
            c.Interior.Color = COLOR_INPUT
        ElseIf c.Value < 0 Then
            c.Interior.Color = COLOR_ERROR
        Else
            c.Interior.Color = COLOR_DONE
        End If
    Next c
End Sub

なぜこの構成か


✅ 背景色をリセットする正しい方法

色を付けるだけでなく、「戻す」処理も重要です。

NG例

Interior.Color = RGB(255, 255, 255)

→ 背景が白とは限らない。

正しい方法

Range("A1:D10").Interior.Pattern = xlNone

なぜPattern = xlNoneなのか

  • 初期状態に戻せる
  • テーマや既定色に依存しない

✅ 処理速度を落とさないための注意点

大量セルに色を付ける処理は、VBAが重くなりがちです。

基本対策

Application.ScreenUpdating = False
' 色付け処理
Application.ScreenUpdating = True

さらに重要な設計ポイント

  • 1セルずつではなく、Range単位で指定する
  • 条件判定は配列で行い、最後にまとめて反映

✅ 実務でよくある応用パターン

・処理済み行をグレーアウトする
・入力必須セルを薄黄色で統一
・エラー行を赤系で強調
・完了したデータを薄緑に変更

これらはすべて、
「色の意味を定数で管理」+「処理と色指定を分離」
で安全に実装できます。


✅ VBAで背景色を扱うときの設計チェックリスト

  • 色の意味がコードから読めるか
  • RGB値を直書きしていないか
  • 色指定が分散していないか
  • 解除(リセット)処理があるか
  • 条件分岐と色指定が混ざっていないか

    背景色の扱い方が整理できたら、
    次は 数値形式・フォント・背景色をまとめて制御する設計 を考えると、
    書式設定のマクロが一気に読みやすく、再利用しやすくなります。

    【VBA】フォーマット設定:数値形式・フォント・背景色の一括/条件設定


 

✅ まとめ:VBAで背景色を安全に扱うために

  • Interior.Color は RGB指定が基本
  • 色は「見た目」ではなく「意味」で管理する
  • 定数化・関数化で保守性を上げる
  • Pattern = xlNone で確実に解除する
  • 処理ロジックと色指定を分離する

背景色の指定は小さな処理に見えますが、設計の差が最も出やすいポイントでもあります。
今回の考え方をベースにすれば、背景色を使ったVBAマクロは「壊れにくい資産」になります。

背景色の制御を含め、VBAでできることは想像以上に幅広いですが、
すべてを自動化すれば良いわけではありません。
実務で無理なく回るかどうかを判断するには、
「どの業務を自動化すべきか/残すべきか」 の基準を持つことが重要です。

Excelで自動化すべき業務・すべきでない業務の見極め方

    -VBAで自動化, VBA一覧, セル・見た目の操作, ビジュアル操作