Excel VBAで背景色を変更する方法をお探しですね。

広告

Excel VBAでセルの背景色を変える方法【ColorIndexとRGBの使い分け】

Excel VBAでセルの背景色(塗りつぶし)を変えるとき、よく使われるのが「ColorIndex」と「RGB」の2つです。

どちらもセルを目立たせたり、条件に応じて表を見やすくしたりするのに便利ですが、使える色の幅や管理のしやすさが違います。

この記事では、初心者でも迷わないように、セルの背景色を変える基本から、ColorIndexとRGBの使い分け、色の取得やクリア方法まで分かりやすく解説します。

1. セルの背景色を変える基本

Excel VBAでセルの背景色(塗りつぶし)を変えるには、Rangeオブジェクトの`Interior`プロパティを使います。

`Interior`はセルの内側の書式を表すもので、背景色を設定するときは`Interior.Color`か`Interior.ColorIndex`を指定します。

ちなみに、文字の色を変えたいときは`Font.Color`や`Font.ColorIndex`を使いますが、セル自体の色を変えたいときは`Interior`を使う、と覚えておきましょう。

基本的な書き方はこんな感じです。

`Range(“B2”)`で対象のセルを指定して、その後ろに背景色の設定を書きます。

1つのセルだけでなく、`Range(“B2:D5”)`のように範囲を指定すれば、複数のセルをまとめて同じ色に変えられます。

日報や集計表で「見出し行だけ色を付ける」「未入力のセルを目立たせる」といった処理を自動化したいときに便利です。

“`vb
Sub 背景色を変更する基本()
Range(“B2”).Interior.Color = RGB(255, 255, 0)
Range(“B4:D6”).Interior.ColorIndex = 35
End Sub
“`

上の例では、B2セルをRGBで黄色っぽい色に変えて、B4:D6の範囲をColorIndexの35番で塗りつぶしています。

なお、標準モジュールで`Range`だけを書くと、基本的には今開いているシートが対象になります。

実際の仕事では、間違ったシートに色が付いてしまうミスを防ぐために、`Worksheets(“Sheet1”).Range(“B2”)`のようにシート名まで書いておくと安心です。

2. ColorIndexでセルの色を変える方法

ColorIndexは、Excelにあらかじめ用意されているカラーパレットの番号を指定して色を設定する方法です。

たとえば、標準的な設定では`3`が赤、`5`が青、`6`が黄色、`35`が薄い緑といった感じで決まっています。

番号だけで色を指定できるので、VBA初心者でも書きやすく、社内ツールのように「決まった色だけ使う」場合には管理しやすい方法です。

背景色をColorIndexで変える基本の書き方は、`Range(“セル範囲”).Interior.ColorIndex = 色番号`です。

次のコードでは、A1セルを赤、A2セルを黄色、A3セルを薄い緑で塗りつぶしています。

`Range`の代わりに`Cells(行番号, 列番号)`を使うこともできて、繰り返し処理の中で行番号や列番号を変えながら色を付けたいときは`Cells`が便利です。

“`vb
Sub ColorIndexで背景色を変更()
Range(“A1”).Interior.ColorIndex = 3 ‘ 赤
Range(“A2”).Interior.ColorIndex = 6 ‘ 黄
Cells(3, 1).Interior.ColorIndex = 35 ‘ 薄い緑
End Sub
“`

ColorIndexのいいところは、コードが短くて読みやすいことです。

ただし、使える色は基本的に限られていて、細かい色の調整には向きません。

また、ColorIndexはブックのカラーパレットやExcel環境の影響を受けることがあるので、厳密に同じ色を再現したいときは注意が必要です。

特に複数の人でファイルを共有する仕事では、「番号で指定した色が思ったのと違って見える」可能性も考えておくといいでしょう。

塗りつぶしを解除したいときは、`xlColorIndexNone`という定数を使う方法が分かりやすくて安全です。

記事やサンプルコードによっては`ColorIndex = 0`で説明されることもありますが、読みやすさと意味の明確さを考えると、塗りつぶしなしを表す定数を使うのがおすすめです。

“`vb
Sub ColorIndexで塗りつぶしを解除()
Range(“A1:A3”).Interior.ColorIndex = xlColorIndexNone
End Sub
“`

3. RGBで好きな背景色を指定する方法

RGBは、赤・緑・青の3色をそれぞれ0〜255の数値で指定して色を作る方法です。

`RGB(255, 0, 0)`なら赤、`RGB(0, 255, 0)`なら緑、`RGB(0, 0, 255)`なら青になります。

ColorIndexよりも細かい色を指定できるので、会社のブランドカラーに近い色を使いたいときや、見やすい淡い色を調整したいときにはRGBが向いています。

背景色をRGBで設定するには、`Interior.Color`に`RGB()`関数の結果を代入します。

次の例では、B2セルを薄い黄色、B3セルを薄い青、B4セルを薄い赤で塗りつぶしています。

強い原色は画面上で目立つ一方、表全体では読みにくくなることがあるので、実際の資料では淡い色を使うと見やすくなります。

“`vb
Sub RGBで背景色を変更()
Range(“B2”).Interior.Color = RGB(255, 255, 204) ‘ 薄い黄色
Range(“B3”).Interior.Color = RGB(204, 229, 255) ‘ 薄い青
Range(“B4”).Interior.Color = RGB(255, 204, 204) ‘ 薄い赤
End Sub
“`

RGBを使うメリットは、色を数値で正確に管理できることです。

たとえば「エラーは薄い赤」「完了は薄い緑」「確認中は薄い黄色」のように色のルールを決めておけば、誰がマクロを実行しても同じ見た目にできます。

さらに、コード内で色を変数や定数としてまとめておけば、あとから色を変更したいときも修正箇所を減らせます。

“`vb
Sub 色を定数として管理する()
Const COLOR_ERROR As Long = 13421823 ‘ RGB(255,204,204)相当
Const COLOR_OK As Long = 13434828 ‘ RGB(204,255,204)相当

Range(“C2”).Interior.Color = RGB(255, 204, 204)
Range(“C3”).Interior.Color = RGB(204, 255, 204)
End Sub
“`

なお、上のようにLong値で色を管理することもできますが、初心者のうちは`RGB(赤, 緑, 青)`の形で書くほうが分かりやすいです。

RGB値はExcelの色選択画面やWeb上のカラーツールで確認できます。

迷ったときは、いきなり複雑な色を作ろうとせず、薄い黄色や薄い青など、表の文字が読みやすい色から使うと失敗しにくくなります。

4. 背景色の取得・クリア・ColorIndexとRGBの使い分け

VBAでは、セルの背景色を変えるだけでなく、すでに設定されている背景色を取得することもできます。

たとえば「B2セルと同じ色を別の範囲に適用したい」という場合は、B2セルの`Interior.Color`か`Interior.ColorIndex`を変数に入れて、その値を別のセルに設定します。

色を直接指定するのではなく、参照元のセルに合わせて処理できるので、テンプレートを使った帳票作成などで役立ちます。

“`vb
Sub 背景色を取得して別セルへコピー()
Dim c As Long

c = Range(“B2”).Interior.Color
Range(“D2:F2”).Interior.Color = c
End Sub
“`

ColorIndexで取得する場合も考え方は同じです。

ただし、複数セルの背景色をまとめて取得する場合は注意が必要です。

指定した範囲内のセルがすべて同じ色なら取得できることがありますが、違う色が混ざっていると、期待した値を取得できない場合があります。

そのため、色を取得するときは、基本的に1つのセルを対象にするのが安全です。

“`vb
Sub ColorIndexを取得して別セルへコピー()
Dim idx As Variant

idx = Range(“B2”).Interior.ColorIndex
Range(“D2:F2”).Interior.ColorIndex = idx
End Sub
“`

背景色をクリアする方法も覚えておくと便利です。

セルの書式全体を消してよい場合は`ClearFormats`が使えますが、罫線や表示形式まで消えてしまいます。

背景色だけを解除したいときは、`Interior.ColorIndex = xlColorIndexNone`を使うと、塗りつぶしなしの状態にできます。

`Interior.Color = RGB(255, 255, 255)`で白にする方法もありますが、これは「塗りつぶしなし」ではなく「白で塗りつぶす」処理なので、見た目が似ていても意味は違います。

“`vb
Sub 背景色をクリアする()
Range(“B2:D5”).Interior.ColorIndex = xlColorIndexNone
End Sub
“`

ColorIndexとRGBの使い分けは、目的で考えると分かりやすくなります。

決まった色を番号で簡単に指定したいならColorIndex、細かい色や統一したデザインを正確に扱いたいならRGBが向いています。

また、条件付き書式で表示上の色が変わっているセルについては、通常の`Interior.Color`ではなく`DisplayFormat.Interior.Color`を使う場面があります。

条件付き書式の結果として見えている色を取得したいときは、この違いも押さえておきましょう。

最後に、実際の仕事で使いやすい例を紹介します。

次のコードは、A列の値が「完了」なら行全体を薄い緑、「要確認」なら薄い黄色、「エラー」なら薄い赤に塗り分けます。

ColorIndexでも同じような処理はできますが、RGBを使うと淡い色を細かく指定できて、見やすい表を作りやすくなります。

“`vb
Sub 状態に応じて行の背景色を変更()
Dim i As Long

For i = 2 To 10
Select Case Range(“A” & i).Value
Case “完了”
Range(“A” & i & “:D” & i).Interior.Color = RGB(204, 255, 204)
Case “要確認”
Range(“A” & i & “:D” & i).Interior.Color = RGB(255, 255, 204)
Case “エラー”
Range(“A” & i & “:D” & i).Interior.Color = RGB(255, 204, 204)
Case Else
Range(“A” & i & “:D” & i).Interior.ColorIndex = xlColorIndexNone
End Select
Next i
End Sub
“`

Excel VBAでセルの背景色を変える処理は、表を見やすくするだけでなく、確認漏れを防いだり、作業の進み具合を分かりやすくしたりするのにも役立ちます。

ColorIndexは手軽さ、RGBは自由度と正確さが強みです。

まずは`Range(“セル”).Interior.ColorIndex`と`Range(“セル”).Interior.Color = RGB(…)`の基本形を覚えて、必要に応じて取得やクリア、条件分岐と組み合わせることで、実際の仕事で使えるVBAマクロへ発展させていけます。

広告