Excel VBAでセルに色を付ける方法と、セルの色を取得する方法を説明します。
セルの色には、文字の色とセルの背景色の2種類があり、それぞれを設定するプロパティは以下になります。設定する値は数値型になります。
- 文字色:Range(セル範囲).Font.ColorもしくはCells(行, 列).Font.Color
- 背景色:Range(セル範囲).Interior.ColorもしくはCells(行, 列).Interior.Color
目次
セルに色をつける
Font.ColorとInterior.Colorプロパティを設定して、文字色と背景色を設定します。
プロパティに設定する値は数値型になり、設定方法は以下の3種類の方法があります。1はRGB形式を数値型に変換したもの、2はRGB形式、1はVBAで用意されているXlRgbColorという定数です。
背景色をイエローグリーンにする例
- Range(セル範囲).Interior.Color = 3329434
- Range(セル範囲).Interior.Color = RGB(154, 205, 50)
- Range(セル範囲).Interior.Color = rgbYellowGreen
Colorプロパティの設定値を探したい方は以下のサイトが分かりやすいので参照ください。
参考 【Excel VBA】Colorプロパティの設定値 XlRgbColor定数と色の対応表(アルファベット順)OfficeのチカラRGB形式の各数値に1(=256の0乗)、256(=256の1乗)、65536(=256の2乗)をかけて、合計した値になります。イエローグリーン = 3329434 を例とすると以下のようになります。
154 * 256^0 + 205 * 256^1 + 50 * 256^2 = 3329434
Interior.Colorプロパティで背景色をつける
セルに色を付けていく準備として、背景色白、文字色黒のセルを用意します。
まずは背景色を青に変更します。A1~A3にて、数値、RBG、XlRgbColorですべて同じ色になることを確認してみます。下のソースを実行すると、背景色が変更されるので試してみてください。
copy
Sub SetInteriorColor()
Dim sheet As Worksheet
Set sheet = ActiveSheet
sheet.Range("A1").Interior.Color = 16711680
sheet.Range("A2").Interior.Color = RGB(0, 0, 255)
sheet.Range("A3").Interior.Color = rgbBlue
End Sub
Font.Colorプロパティで文字色をつける
次に、文字色を黒から白に変えてみます。下のマクロを実行すると、文字色が白に変更されることを確認できます。
copy
Sub SetFontColor()
Dim sheet As Worksheet
Set sheet = ActiveSheet
sheet.Range("A1").Font.Color = 16777215
sheet.Range("A2").Font.Color = RGB(255, 255, 255)
sheet.Range("A3").Font.Color = vbWhite
End Sub
セルの色を取得する
セルの色を取得すると言っていますが、厳密には色を設定している数値を取得する、ということになります。
数値を取得するためには、変数を用意して、そこにFont.ColorまたはInterior.Colorプロパティを代入すればOKです。
ただ、Colorプロパティを設定するときには3種類の方法がありましたが、取得するときには数値型だけになります。
Interior.Colorプロパティから背景の色を取得する
色を設定したセルを利用して、背景色を取得してみます。取得できたことを確認するためにメッセージボックスに値を出力するようにしています。
背景色に設定した、rgbBlue = 16711680が取得できています。
copy
Sub GetInteriorColor()
Dim sheet As Worksheet
Dim a1InteriorColor As Long
Set sheet = ActiveSheet
a1InteriorColor = sheet.Range("A1").Interior.Color
MsgBox a1InteriorColor
End Sub
Font.Colorプロパティから文字の色を取得する
文字色を取得してみます。
文字色に設定した、vbWhite= 16777215が取得できています。
copy
Sub GetFontColor()
Dim sheet As Worksheet
Dim a1FontColor As Long
Set sheet = ActiveSheet
a1FontColor = sheet.Range("A1").Font.Color
MsgBox a1FontColor
End Sub
複数セルに設定されているColorプロパティを知りたいとき
Excelを使っていると、「このセルの色どれかわからない…」ということがあり、Colorプロパティを取得したいと思うことがあります。
そんなとき、例えば以下の図のように複数のセルのInterior.Colorプロパティを取得するマクロを作成しました。
使い方は、Colorプロパティを知りたいセルを選択して、マクロを実行するだけです。マクロが実行されると、選択したセルの値にColorプロパティが設定されます。
copy
' 選択したセルの背景色を取得して、選択したセルの値に設定する
Sub GetRangeInteriorColor()
Dim rng, rngs As Range
Set rngs = Selection
For Each rng In rngs
rng.Value = rng.Interior.Color
Next rng
End Sub