文字列に色を設定・解除する方法

今回の目標

この記事では、文字列に色を設定・解除する方法や、色が設定されているかを取得する方法を解説します。

目標リスト

  • 文字列に色を設定できるようになる
  • 文字列の色を解除できるようになる
  • 文字列に色が設定されているか確認できるようになる
  • セル内の一部の文字のみ、色を設定できるようになる

Font.Color プロパティについて

Font.Color プロパティとは

Font.Color プロパティは、Rangeオブジェクトに含まれる Font オブジェクトのプロパティで、色の設定及び設定状況を取得できます。
フォントの色を、0 ~ 16777215 の範囲で細かく指定できます。 色を指定する際はRGB関数を使うか、XlRgbColor 列挙を使うと良いでしょう。 取得時は Variant 型(実際は Long型)の値です。
なお、Font.Color プロパティで、自動色に戻すのは難しいため、戻すときは Font.ColorIndex プロパティを使用してください。

Font.Color プロパティに数値を代入する方法は、3種類あります。

  1. RGB関数を使用する
  2. vbRed 等の標準色を使用する
  3. 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関数
vbBlackRGB(0, 0, 0)
vbWhiteRGB(255, 255, 255)
vbRedRGB(255, 0, 0)
vbGreenRGB(0, 255, 0)
vbBlueRGB(0, 0, 255)
vbYellowRGB(255, 255, 0)
マゼンタvbMagentaRGB(255, 0, 255)
シアンvbCyanRGB(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 の数値を一覧で紹介します。

ColorIndexRGB値
1RGB(0, 0, 0)
2RGB(255, 255, 255)
3RGB(255, 0, 0)
4RGB(0, 255, 0)
5RGB(0, 0, 255)
6RGB(255, 255, 0)
マゼンタ7RGB(255, 0, 255)
シアン8RGB(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
【実行結果】
(下の画像のようになります)
プログラム実行後の画像

関連リンク

ページの先頭へ