Excelを使う時、文字色や背景色をセルごとに変更したいケースはよくあると思います。
そこで今回は、VBAでセルの色を設定する方法について、詳しく解説をしていきたいと思います。
VBAでセルに色を設定するには?
Excelでは、各セルごとに文字の色や背景の色を設定することができます。
シート上で操作する場合は、色を変えたいセルを選択してから、フォント部分のアイコンをクリックして色を選択します。


既存のパレットから選択するか、「その他の色」を選択して以下のダイアログを表示し、自由に選択します。

VBAで色の変更を行う場合、主に2通りの方法があります。
1つ目は、RGB関数を使用してColorプロパティに設定する方法です。RGBとは、色の表現法の一種で、赤 (Red)、緑 (Green)、青 (Blue)の三つの原色を混ぜて色を再現する方法です。
以下のように、それぞれの色を0~255の数値で指定して色を作成します。
【基本構文】
RGB(赤の数値, 緑の数値, 青の数値)
RGBによる色の表現は数値の設定が少々複雑な代わりに、幅広い色を細かく表現できるメリットがあります。
2つ目は、ColorIndexプロパティを使用して設定する方法です。元はOffice 2003以前の旧式カラーパレットの色を指定するためのプロパティで、カラーパレット内の各位置に対応したインデックス番号を使って色を指定します。使用できる番号は0~56のいずれかです。

RGB関数に比べて指定できる色の種類は少ないものの、対応する番号を指定するだけで簡単に色を選ぶことができます。また、各位置の配色は変更することもできるので、よく使う色を事前に配置して呼び出しやすいように設定したり、既存のコードを修正せずに色の変更を行うことができます。
▼ColorIndexプロパティについてはこちらでも詳しく解説しています▼
Font.Colorで文字色を設定する
それでは、具体的な色の指定方法について解説をしていきたいと思います。
まずは、文字色を設定する方法について見ていきましょう。VBAで文字色の変更を行う場合は、RangeオブジェクトのFontプロパティを使用します。
【Fontプロパティの基本構文】
Range("セル範囲").Font
セルの指定方法は上記の方法で可能ですが、RGB関数とColorIndexのどちらを使うかでその後の指定方法が少々異なります。RGB関数を使って色の指定を行う場合は、以下のようにColorプロパティを使用します。
【Colorプロパティの基本構文】
Range("セル範囲").Font.Color = RGB(赤の数値, 緑の数値, 青の数値)
色ごとの数値を調べる方法は様々ありますが、先ほど紹介した色ダイアログでも確認することができます。

以下のサンプルコードで、実際に文字色を変更してみます。
【サンプルコード】
Sub sampleFontColor1()
Range("B2").Font.Color = RGB(255, 0, 0)
End Sub
【実行結果】

B2セルの文字色を赤に変更することができました。
セルの範囲については、複数のセルを同時に変更することも可能です。
【サンプルコード】
Sub sampleFontColor1()
Range("B2:C3").Font.Color = RGB(0, 0, 255)
End Sub
【実行結果】

Font.ColorIndexで文字色を設定する
次は、ColorIndexプロパティを使う方法について見ていきましょう。
基本構文は以下の通りです。
【基本構文】
Range("セル範囲").Font.ColorIndex = インデックス番号
例えば、先ほどと同じように赤色に設定したい場合、デフォルトのカラーパレットでは3を指定します。
【サンプルコード】
Sub sampleFontColorIndex()
Range("B2").Font.ColorIndex = 3
End Sub

各番号の対応位置とデフォルトの配色については、以下を参考にしてください。

Interior.Colorで背景色を設定する
続いて、セルの背景色を変更する方法について解説していきます。
背景の色を変更したい場合は、RangeオブジェクトのInteriorプロパティを使用します。まずは、RGB関数での設定方法を見てみましょう。
【基本構文】
Range("セル範囲").Interior.Color = RGB(赤の数値, 緑の数値, 青の数値)
指定の仕方については、文字色を変更する場合とほとんど同じです。
以下のサンプルコードで、今度はセルの背景を緑色に変更してみます。
【サンプルコード】
Sub sampleInteriorColor()
Range("B2:C3").Interior.Color = RGB(0, 255, 0)
End Sub
【実行結果】

Colorプロパティで、背景の色を設定することができました。
背景色も文字色の時と同様に、複数のセルを同時に変更することができます。
Interior.ColorIndexで背景色を設定する
ColorIndexプロパティを使用する方法でも、背景色を設定することができます。
こちらも、基本構文は文字色の時とほとんど変わりません。
【基本構文】
Range("セル範囲").Interior.ColorIndex = インデックス番号
以下が、実際に使用する場合のサンプルコードです。
【サンプルコード】
Sub sampleInteriorColorIndex()
Range("B2").Interior.ColorIndex = 6
End Sub
【実行結果】

各番号の対応位置とデフォルトの配色については、以下を参考にしてください。

セルの色を取得する際の注意点
ColorプロパティとColorIndexプロパティは、色を変更するだけでなく設定済みの情報を取得するのにも使えます。その際、いくつか注意するべきポイントがあります。
まず、複数範囲のセルを指定して文字色を取得しようとした場合、選択したセル全てが同じ色であれば正常に動作しますが、異なる色が紛れているとNullが返却され、正しく値を取得することができません。そのため、変数に格納しようとするとエラーが発生してしまいます。
また、背景色で同様に色の異なるセル同士を指定した場合、ColorIndexプロパティはNullを返却しますが、Colorプロパティの場合はNullの代わりに黒を意味する0を返却します。処理自体はエラーが発生することなく完了されてしまうため、On Errorステートメントのような通常のエラー処理とは別の方法で例外を拾う必要があります。
これらを踏まえた上で、基本的に色を取得する際は、単独セルで行う方がより安全に処理することができます。
セルの色をクリアする
セルに設定されている情報を一旦クリアしたい時もあるかと思います。
VBAでセルに関する情報をクリアする方法はいくつかあるので、順に説明していきます。
ClearFormatsで色と書式をクリアする
セルに関する情報をクリアする際は、Rangeオブジェクトのメソッドを使用します。
書式に関する情報のみをクリアしたい場合には、ClearFormatsメソッドを使いましょう。
【基本構文】
Range("セル範囲").ClearFormats
試しに、以下のサンプルコードで書式をクリアしてみましょう。
【実行前】

【サンプルコード】
Sub sampleClearFormats()
Range("B2:C3").ClearFormats
End Sub
余談ですが、書式だけでなく値なども全てクリアしたい場合には、Clearメソッドを使用します。
【サンプルコード】
Sub sampleClear()
Range("B2:C3").Clear
End Sub
【実行結果】

Font.Colorで文字色をクリアする
Colorプロパティを使用して文字色をクリアしたい時は、初期設定の色である黒色を指定するといいでしょう。RGB関数で黒色を作成する場合は、全ての引数で0を指定します。
【基本構文】
Range("セル範囲").Font.Color = RGB(0, 0, 0)
例として、以下の状態からB2セルの文字色をクリアしてみます。
【変更前】

【サンプルコード】
Sub sampleClearColor()
Range("B2").Font.Color = RGB(0, 0, 0)
End Sub
【実行結果】

Font.ColorIndexで文字色をクリアする
ColorIndexプロパティを使用してクリアする場合には、インデックス番号に0を指定します。
ColorIndexにおける0番は、塗りつぶしなしという設定になります。
【基本構文】
Range("セル範囲").Font.ColorIndex = 0
先ほどと同じ内容をColorIndexで行う場合、以下のようなコードになります。
【サンプルコード】
Sub sampleClearColorIndex()
Range("B2").Font.ColorIndex = 0
End Sub
Interior.Colorで背景色をクリアする
Colorプロパティでを背景色をクリアする場合は、白を指定します。
RGB関数で白を作成するには、全ての引数に255を指定します。
【サンプルコード】
Sub sampleClearInterior()
Range("B2:C3").Interior.Color = RGB(255, 255, 255)
End Sub
【実行結果】

結果を見ると分かると思いますが、Colorプロパティで白を選択する方法は、塗りつぶしなしを選択した場合とは厳密には異なります。ケースによっては、使用に向かない点に注意が必要です。
Interior.ColorIndexで背景色をクリアする
ColorIndexプロパティで背景色をクリアする場合は、文字色と同様に0で塗りつぶしなしを指定することができます。
【サンプルコード】
Sub sampleClearInterior2()
Range("B2:C3").Interior.ColorIndex = 0
End Sub
【実行結果】

まとめ
いかがでしたでしょうか?今回は、セルの色を設定するための方法として、ColorプロパティやRGB関数の使い方、ColorIndexプロパティの使い方についてなどを解説してきました。
どちらの方法もメリットがある便利な機能なので、状況に応じて使い分けられるようにすると、より効率的に作業が行えるようになると思います。ぜひ、習得してみてください!
関連記事
- VBAとは
- Excelで覚えておくべき17の基本関数と目的別逆引き一覧
- オートフィルターの設定・解除方法
- メッセージボックスの設定方法
- セルの値を取得・上書きするValueプロパティの使い方を解説
- 【Excel VBA】Rangeでセルを範囲選択する方法を解説
VBAの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、VBAに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。