文字列に色を設定・解除する方法
今回の目標
この記事では、文字列に色を設定・解除する方法や、色が設定されているかを取得する方法を解説します。
目標リスト
- 文字列に色を設定できるようになる
- 文字列の色を解除できるようになる
- 文字列に色が設定されているか確認できるようになる
- セル内の一部の文字のみ、色を設定できるようになる
Font.Color プロパティについて
Font.Color プロパティとは
Font.Color プロパティは、Rangeオブジェクトに含まれる Font オブジェクトのプロパティで、色の設定及び設定状況を取得できます。
フォントの色を、0 ~ 16777215 の範囲で細かく指定できます。
色を指定する際はRGB関数を使うか、XlRgbColor 列挙を使うと良いでしょう。
取得時は Variant 型(実際は Long型)の値です。
なお、Font.Color プロパティで、自動色に戻すのは難しいため、戻すときは Font.ColorIndex プロパティを使用してください。
Font.Color プロパティに数値を代入する方法は、3種類あります。
- RGB関数を使用する
- vbRed 等の標準色を使用する
- XlRgbColor 列挙を使用する
RGB関数について
RGB関数は、赤(Red)、緑(Green)、青(Blue)を組み合わせて色を作りだす関数です。
第一引数に赤の深度、第二引数に緑の深度、第三引数に青の深度を指定します。深度は、0 ~ 255 の数値で指定します。
例えば、RGB(255, 0, 0)なら赤、RGB(255, 255, 0)なら黄色、RGB(255, 255, 255)なら白、RGB(0, 0, 0)なら黒です。
Font.Color プロパティに、この関数の戻り値を代入することで色を変更できます。
文字のフォント → その他の色 → ユーザー設定 で色を指定する時と同じです。
RGB関数についての詳細を知りたい方は、Microsoft公式をご確認ください。
【Microsoft Learn】RGB 関数
標準カラーについて
Font.Color プロパティに、定数を代入することでフォントの色を設定できます。 標準カラーは、Word VBAやAccess VBA等で使用でき、「vbBlack」等の8種類の定数があります。
| 色 | 定数 | RGB関数 |
|---|---|---|
| 黒 | vbBlack | RGB(0, 0, 0) |
| 白 | vbWhite | RGB(255, 255, 255) |
| 赤 | vbRed | RGB(255, 0, 0) |
| 緑 | vbGreen | RGB(0, 255, 0) |
| 青 | vbBlue | RGB(0, 0, 255) |
| 黄 | vbYellow | RGB(255, 255, 0) |
| マゼンタ | vbMagenta | RGB(255, 0, 255) |
| シアン | vbCyan | RGB(0, 255, 255) |
XlRgbColor 列挙
「rgbAliceBlue」等の先頭に"rgb"がつく定数のことで、140種類を超える定数があります。
Font.Color プロパティに、この定数を代入することで色を変更できます。
なお、rgbAliceBlueは、アリスブルー(淡い青色)です。
下記、Microsoftのリンクに、定数一覧があります。
【Microsoft Learn】XlRgbColor 列挙 (Excel)
余談ですが、Excelが規定している定数のため、Word VBAや Access VBAで、XlRgbColor 列挙を使用できません。
Font.Color プロパティの構文
セルA1に色を設定するプログラムです。
Range("A1").Font.Color = rgbAliceBlue
Range("A1").Font.Color = RGB(240, 248, 255)
上記、プログラムは同じ色になります。
セルA1に文字色が設定されているか取得するプログラムです。取得結果はイミディエイトウィンドウに、数値で表示されます。
Debug.Print Range("A1").Font.Color
Font.ColorIndex プロパティについて
Font.ColorIndex プロパティとは
Font.ColorIndex プロパティは、Rangeオブジェクトに含まれる Font オブジェクトのプロパティで、フォントの色を、1 ~ 56 で指定及び設定状況を取得できます。
この数値は Excel に用意された「カラーパレット(56色)」の番号を意味します。
なお、Font.ColorIndex プロパティに "xlAutomatic" を代入すると、初期状態の色(自動色)に戻ります。
57 以上の数値を指定すると、実行時エラーが発生します(環境によって、実行時エラー '9' または、実行時エラー '1004' になる場合があります)。
Font.ColorIndex プロパティで取得すると、近似値を返すため、正しく色が判断できません。 例えば、暗めの赤( 例:RGB(200, 0, 0) )は、Font.ColorIndexなら '3'。明るい赤( 例:RGB(255, 0, 0) )でも、Font.ColorIndexなら、'3' になってしまいます。 何色に設定しているか取得したい場合は、Font.Color プロパティを使いましょう。 ただし、色が設定されているかを調べるなら、「Font.ColorIndex = xlAutomatic」で確認できます。
Font.ColorIndex プロパティとRGB関数
標準色(1~8)の ColorIndex に対応する RGB の数値を一覧で紹介します。
| 色 | ColorIndex | RGB値 |
|---|---|---|
| 黒 | 1 | RGB(0, 0, 0) |
| 白 | 2 | RGB(255, 255, 255) |
| 赤 | 3 | RGB(255, 0, 0) |
| 緑 | 4 | RGB(0, 255, 0) |
| 青 | 5 | RGB(0, 0, 255) |
| 黄 | 6 | RGB(255, 255, 0) |
| マゼンタ | 7 | RGB(255, 0, 255) |
| シアン | 8 | RGB(0, 255, 255) |
| 自動色 | xlAutomatic | - |
Font.ColorIndex プロパティの構文
セルA1に色を設定するプログラムです。
Range("A1").Font.ColorIndex = 3
セルA1に文字色が設定されているか取得するプログラムです。取得結果はイミディエイトウィンドウに、数値で表示されます。
Debug.Print Range("A1").Font.ColorIndex
文字列に色を設定する
Font.Color プロパティで、文字列の色を設定する
Font.Color プロパティを使って色を設定します。
サンプルコード
Sub FontColorSample1_1()
'サンプルのテキストを入力
Range("A1:A3").Value = "地道に学ぶExcelVBA"
'文字の色を赤にする
Range("A1").Font.Color = RGB(255, 0, 0)
'文字の色を濃いマゼンタにする
Range("A2").Font.Color = rgbDarkMagenta
'文字の色を青にする
Range("A3").Font.Color = vbBlue
End Sub
(下の画像のようになります)
Font.ColorIndex プロパティで、文字列の色を設定する
Rangeオブジェクトの Font.ColorIndex を使って色を設定、解除します。
サンプルコード
Sub FontColorSample1_2()
'サンプルのテキストを入力
Range("A1:A3").Value = "地道に学ぶExcelVBA"
'文字の色を初期色(デフォルトでは黒)にする
Range("A1").Font.ColorIndex = xlAutomatic
'文字の色を赤にする
Range("A2").Font.ColorIndex = 3
'文字の色をシアンにする
Range("A3").Font.ColorIndex = 8
End Sub
(下の画像のようになります)
文字色が設定されているか確認する
文字色がデフォルトの色か確認する
Font.ColorIndex プロパティを使用して文字列に色が設定されているか、確認します。
サンプルコード
Sub FontColorSample2_1()
Dim bl1 As Boolean
Dim bl2 As Boolean
'青に設定する
Range("A1:A2").Font.Color = vbBlue
'文字の色を初期色(デフォルトでは黒)にする
Range("A1").Font.ColorIndex = xlAutomatic
'文字色が初期色か、取得する
bl1 = Range("A1").Font.ColorIndex = xlAutomatic
bl2 = Range("A2").Font.ColorIndex = xlAutomatic
Debug.Print "セルA1は、フォントの色を設定して" & _
IIf(bl1, "いません", "います")
Debug.Print "セルA2は、フォントの色を設定して" & _
IIf(bl2, "いません", "います")
End Sub
セルA1は、フォントの色を設定していません
セルA2は、フォントの色を設定しています
文字色に設定されているRGB値を取得する
Font.Color プロパティで文字列に色が設定されているか、確認します。
「何も色が設定されていない状態か」を確認することで、種類を問わず色が設定されているかを確認します。
サンプルコード
Sub FontColorSample2_2()
Dim c As Long
Dim i As Long
Dim r As Long, g As Long, b As Long
'サンプルのテキストを入力
Range("A1:A3").Value = "地道に学ぶExcelVBA"
'文字の色を初期色(デフォルトでは黒)にする
Range("A1").Font.ColorIndex = xlAutomatic
'赤に設定する
Range("A2").Font.Color = vbRed
'青に設定する
Range("A3").Font.ColorIndex = 5
'RGBの値を取得・表示する
For i = 1 To 3
c = Cells(i, 1).Font.Color
r = c Mod 256
g = Int(c / 256) Mod 256
b = Int(c / 65536) Mod 256
'イミディエイトウィンドウに表示する
Debug.Print "A" & i & " → " & _
"RGB(" & r & ", " & g & ", " & b & ")"
Next i
End Sub
A1 → RGB(0, 0, 0)
A2 → RGB(255, 0, 0)
A3 → RGB(0, 0, 255)
【補足】
先のプログラムで「g = Int(c / 256) Mod 256」と記載しましたが、
「g = (c \ 256) Mod 256」でも動作します。
"\" (バックスラッシュ)は、VBAのエディタで "¥" で表記される場合があり、割った余りを切り捨てます。
文字列の一部に色を設定する
文字列の一部に色を設定する場合は、「Range」オブジェクトと「Font.Color」プロパティや「Font.ColorIndex」の間に『Characters』を追加します。
詳細は別記事(※準備中)で説明しますが、『Characters(開始位置, 文字数)』プロパティを使用します。
例:Range("A1").Characters(3, 2).Font.Color = vbRed
→ セルA1の3文字目から2文字のみ(=3文字目と4文字目)、文字色を赤に設定する
サンプルコード
Sub FontColorSample3()
'セルA1にテキストを入力し、文字色をデフォルトにする
With Range("A1")
.Value = "ABCDEFGHIJ"
.Font.ColorIndex = xlAutomatic
End With
'文字の一部分に色を設定する
With Range("A1")
'RGB(255, 40, 120)は、ピンク
.Characters(Start:=2, Length:=3).Font.Color _
= RGB(255, 40, 120)
'ColorIndex の 5 は、青
.Characters(Start:=7, Length:=3).Font.ColorIndex _
= 5
End With
End Sub
(下の画像のようになります)
