Excelを使うときに多い操作は、罫線で表を作る、文字やセルの背景に色をつける、ではないでしょうか?
VBAで文字や背景に色をつけることができると、とても便利ですよね。本記事では、
- セルに色を設定する方法
- セルの色を取得する方法
といった基本的な内容から、
- セルの色をクリアする方法
といった応用的な内容まで解説します。本記事を読み終える頃には、VBAで文字色やセルの背景色を変えられるようになっていますよ!
セルに色を設定する方法
最初に言葉の整理をしておきます。色をつけたいセルまで移動してペンキのバケツボタンや「A」のボタンをクリックして色をつけます。
どちらも色をつけると言ってしまいますが、正しくは以下のとおりです。セルの文字に色をつけるときはセルの文字色を設定するといいます。
セルそのものに色をつけるときはセルの背景色を設定するといいます。以降、これらに従い解説します。
セルの文字色を設定する場合でも、セルの背景色を設定する場合でも、主に2通りの方法があります。
RangeオブジェクトのColorプロパティを使う方法と、ColorIndexプロパティを使う方法です。セルの文字色を設定する場合は、RangeオブジェクトのFontプロパティを指定します。
セルの背景色を設定する場合は、RangeオブジェクトのInteriorプロパティを指定します。それぞれの使い方について、詳しくみていきましょう。
Font.Colorで文字色を設定する方法
セルや範囲を指定し文字色を設定するには、Range.Font.Colorプロパティを使います。Rangeオブジェクトで色を設定したい範囲を記述し、Range.FontプロパティのColorプロパティで色を指定します。
[書式]
Range(範囲).Font.Color = RGB(赤:Red, 緑:Green, 青:Blue)
B2セルの背景色を赤色に設定します。
[使い方]
Sub Sample1() Range("B2").Font.Color = RGB(255, 0, 0) End Sub
[実行結果]
B2セルの文字色を赤色に設定できました。
もちろん、Rangeのカッコの中はRange(“B2:C3”)といった範囲で指定可能です。ここでRGB関数とは何か?という解説をします。
RGB関数とは、色を赤:Red、緑:Green、青:Blueの3つの組み合わせで表現するものです。試しにB2セルを選択し、「A」のマークのボタンにある▼をクリックしてください。
「その他の色」を選択し、ユーザー設定のタブをクリックしてください。
赤を選択した状態だと、数値が赤:255・青:0・緑:0となっています。
このことから、RGB関数は、赤青緑をそれぞれ0〜255の数値で表現し、さらに3つを組み合わせて色を表現する関数ということが分かります。
Font.ColorIndexで文字色を設定する方法
色を設定するもう一つの方法についてもみていきましょう。
その方法とは、ColorIndexプロパティを使う方法です。
[書式]
Range(範囲).Font.ColorIndex = 色のインデックス番号
同じようにB2セルの背景色を赤色に設定します。
[使い方]
Sub Sample1() Range("B2").Font.ColorIndex = 3 End Sub
[実行結果]
ColorIndexプロパティと色のインデックス番号の指定については、こちらで詳しく解説しています。ぜひ参考にしてください。
Interior.Colorで背景色を設定する方法
セルや範囲を指定し背景色を設定するには、Range.Interior.Colorプロパティを使います。
[書式]
Range(範囲).Interior.Color = RGB(赤:Red, 緑:Green, 青:Blue)
範囲C2:D3の背景色を青色に設定します。
[使い方]
Sub Sample2() Range("C2:D3").Interior.Color = RGB(0, 0, 255) End Sub
[実行結果]
範囲C2:D3の背景色に青色を設定できました。
Rangeのカッコの中はRange(“B2”)といったセルでも指定可能です。
Interior.ColorIndexで背景色を設定する方法
ColorIndexプロパティでも背景色を設定してみましょう。
[書式]
Range(範囲).Interior.ColorIndex = 色のインデックス番号
範囲C2:D3の背景色を青色に設定します。
[使い方]
Sub Sample2() Range("C2:D3").Interior.ColorIndex = 5 End Sub
[実行結果]
セルの色を取得する方法
VBAを使って、文字色や背景色を取得できます。
しかし「◯◯セルと同じ色に」という場合は、参照するセルごとに設定する色が都度異なる可能性があります。
そんなケースの場合は、
- 1.セルの色を取得する
- 2.取得した色で、他のセルの色を設定する
という手順を踏まなくてはなりません。
先ほどと同じように、色の取得を文字色→背景色の順で解説します。
Font.Colorで文字色を取得する方法
セルを指定し文字色を取得するにはRange.Font.Colorプロパティを使います。
[書式]
格納する変数 = Range(セル).Font.Color
B2セルの文字色(赤色)を取得して、B4セルの文字色に取得した色を設定します。
[使い方]
Sub Sample3() Dim l As Long l = Range("B2").Font.Color Range("B4").Font.Color = l End Sub
[実行結果]
B2セルの文字色を取得し、B4セルの文字色に設定できました。
Font.ColorIndexで文字色を取得する方法
ColorIndexプロパティでも文字色を取得してみましょう。
[書式]
格納する変数 = Range(セル).Font.ColorIndex
同じようにB2セルの文字色(赤色)を取得して、B4セルの文字色に取得した色を設定します。
[使い方]
Sub Sample3() Dim l As Long l = Range("B2").Font.ColorIndex Range("B4").Font.ColorIndex = l End Sub
[実行結果]
Interior.Colorで背景色を取得する方法
セルを指定し背景色を取得するには、Range.Interior.Colorプロパティを使います。
[書式]
格納する変数 = Range(セル).Interior.Color
C2セルの背景色を取得し、範囲C4:D5の背景色に設定します。
Sub Sample4() Dim l As Long l = Range("C2").Interior.Color Range("C4:D5").Interior.Color = l End Sub
[実行結果]
C2セルの背景色を、範囲C4:D5に設定できました。
Interior.ColorIndexで背景色を取得する方法
ColorIndexプロパティでも背景色を取得してみましょう。
[書式]
格納する変数 = Range(セル).Interior.ColorIndex
C2セルの背景色を取得し、範囲C4:D5の背景色に設定します。
Sub Sample4() Dim l As Long l = Range("C2").Interior.ColorIndex Range("C4:D5").Interior.ColorIndex = l End Sub
[実行結果]
セル範囲の色を取得する上での注意点
セル範囲の色を取得する上でいくつか注意点があります。
まず、範囲を指定して文字色を取得することはできません。仮にSample3()において「Range(“B2:B3”).Font.Color」とした場合、この式がNullを返し「実行時エラー’94’; Nullの使い方が不正です」と表示されます。
また、仮にSample4()において、背景色を取得する式を「l = Range(“C2:D3”).Interior.Color」と範囲指定した場合、どうなるでしょうか?
範囲指定した中のセルが全て同じなら、問題なく動作します。ところが範囲内のうち1つでも異なる背景色があると、エラーメッセージは表示されませんが結果はこうなります。
異なる背景色があると「Range(“C2:D3”).Interior.Color」が黒を意味する0を返すので、背景色を設定する際に黒になってしまいます。
これらを踏まえて、背景色を取得するなら範囲指定にせず、単独のセルで取得するようにしましょう。
セルの色をクリアする方法
指定した範囲の書式すべてをクリアする方法と、文字色か背景色のいずれかをクリアする方法を順に解説します。
ClearFormatsで色と書式をクリアする方法
範囲を指定して書式すべてをクリアするには、Range.ClearFormatsメソッドを使います。
[書式]
Range(範囲).ClearFormats
範囲A1:D3の書式をクリアします。
[使い方]
Sub Sample5() Range("A1:D3").ClearFormats End Sub
[実行結果]
範囲A1:D3の書式(つまり文字色と背景色)をクリアできました。
Font.Colorで文字色をクリアする方法
文字色をクリアするには、Range.Font.Colorプロパティを使います。クリアするというのは、色パレットで「黒」を選択するのと同じ意味です。
[書式]
Range(範囲).Font.Color = RGB(0, 0, 0)
B4セルの文字色をクリアします。
[使い方]
Sub Sample6() Range("B4").Font.Color = RGB(0, 0, 0) End Sub
[実行結果]
B4セルの文字色をクリアできました。Rangeのカッコの中は、Range(“B4:D5”)といった範囲の指定も可能です。
Font.ColorIndexで文字色をクリアする方法
Range.Font.ColorIndexプロパティを使うこともできます。この場合クリアするというのは、インデックス番号を0で指定するのと同じ意味です。
[書式]
Range(範囲).Font.ColorIndex = 0
B4セルの文字色をクリアします。
[使い方]
Sub Sample6() Range("B4").Font.ColorIndex = 0 End Sub
[実行結果]
Interior.Colorで背景色をクリアする方法
背景色をクリアするには、Range.Interior.Colorプロパティを使います。背景色を「白」で指定してクリアします。
[書式]
Range(範囲).Interior.Color = RGB(255, 255, 255)
範囲C4:D5の背景色をクリアします。
[使い方]
Sub Sample7() Range("C4:D5").Interior.Color = RGB(255, 255, 255) End Sub
[実行結果]
範囲C4:D5の背景色をクリアできました。
ただし、背景色を「白」にしていますので、罫線まで白色になっていますRangeのカッコの中は、Range(“B4”)といったセルの指定も可能です。
Interior.ColorIndexで背景色をクリアする方法
背景色をクリアするには、Range.Interior.ColorIndexプロパティを使う方が適しています。文字色をクリアする場合と同じようにインデックス番号を0で指定します。
[書式]
Range(範囲).Interior.ColorIndex = 0
同じように範囲C4:D5の背景色をクリアします。
[使い方]
Sub Sample7() Range("C4:D5").Interior.ColorIndex = 0 End Sub
[実行結果]
このようにColorIndexプロパティを0で指定すると罫線の色も元の色に戻すことができます。
まとめ
この記事では、セルの文字色や背景色を設定・クリアする方法を解説しました。
業務で頻繁に行っている定型作業に対し、解説してきたことが適用できそうなら、ぜひVBAで自動化してみてください。
セルの文字色や背景色を設定・クリアする方法を忘れたときは、この記事を思い出してくださいね!