
VBAで条件により文字色や背景色をまとめて変える

エクセルで成績表や日付があると文字の色やセルの背景色を変えたいと思いませんか?
例えば、テストの成績表で80点以上ならば赤色文字にまたはセルの背景色をピンク色とかに変えられたら見栄えが良くなりますよね。
ここでは、ユーザーフォームに配置したコマンドボタンを押すことにより、80点以上の人を探して条件に一致したらセルの文字色や背景色を変えられるようにしましょう。
指定したセルの文字・背景色を変更方法
まずは基本的な文字色や背景色の変更方法から順におさらいしておきましょう。
ここではユーザーフォームに配置したコマンドボタンにVBAコードを書き込みます。
指定したセルの文字色を変更する
例えば、セルA1の文字色を初期設定の黒色を赤色に指定しましょう。
赤色のColorIndex番号は3です。
Private Sub CommandButton1_Click()
Range(“A1”).Font.ColorIndex = 3
End Sub
- コマンドボタン1が押されたら
- セルA1の文字色を色見本の3番(赤色)にする
- マクロ記録終了
ついでに文字色変更するには、Font.ColorIndexの他にRGBで指定することもできます。
Private Sub CommandButton1_Click()
Range(“A1”).Font.Color = RGB(255, 0, 0)
End Sub
- コマンドボタン1が押されたら
- セルA1の文字色をRGB色配合の組み合わせで表す(赤色)
- マクロ記録終了
どにらも文字色を赤色に変更できます。

ちなみにColorIndexには色見本というのがあり、56種類の色見本です!
決まった範囲のセルの文字色を変える
色を変更したいセルは常に1か所ではなくある一定の範囲で指定したい時がありますので、ここではセルの範囲(A1~C3)を全て赤色に変えてみましょう。
Private Sub CommandButton1_Click()
Range(“A1:C3”).Font.ColorIndex = 3
End Sub
- コマンドボタン1が押されたら
- セルA1からC3の範囲の文字色を色見本の3番(赤色)にする
- マクロ記録終了
もちろんRGBも同じようにできます。
指定したセルの背景色を変更する
今度は背景色ですが、文字色とほぼ同じで文字を表すFontを背景を表すInteriorに変えるだけですよ。
Private Sub CommandButton1_Click()
Range(“A1”).Interior.ColorIndex = 3
End Sub
では続けてRGBにして、範囲をA1:C3で色を青色にしましょう。
Private Sub CommandButton1_Click()
Range(“A1:C3”).Interior.Color = RGB(0, 0, 255)
End Sub
もちろんなのですが、文字色と背景色を続けて書けば同時に色を変えられるので、このように文字色は赤色で背景色は青色もできますよ。
Private Sub CommandButton1_Click()
Range(“C3”).Font.ColorIndex = 3
Range(“C3”).Interior.ColorIndex = 5
End Sub
基本的な文字色・背景色は大丈夫ですね。
次は実用的する為にテストの点数が80点以上ならば赤色に文字色を替えてみましょう。
1つの条件により文字色を変える
テストの点数が80以上の時に文字色を変えるという事は、もし80点以上だったらと言い換えられますので、If~Thenを使います。
Private Sub CommandButton1_Click()
If Range(“C3”).Value >= 80 Then
Range(“C3”).Font.ColorIndex = 3
End If
End Sub
- コマンドボタン1が押されたら
- もしセルC3の値が80以上だったら
- セルC3の文字色を色見本3番(赤色)にする
- Ifステートメント終了
- マクロ記録終了
「>=80」で80点以上を表し、条件に合えば、赤色文字にしてそうではない場合(80点未満)は何もしない(色を変えない)という事ですね。
ここまでやったら、80点以上の条件に付けくわえて30点以下は背景色黄色を追加してみませんか?
2つの条件によりそれぞれセルの色を変える
Private Sub CommandButton1_Click()
If Range(“C3”).Value >= 80 Then
Range(“C3”).Font.ColorIndex = 3
ElseIf Range(“C3”).Value <= 30 Then
Range(“C3”).Interior.ColorIndex = 6
End If
End Sub
- コマンドボタン1が押されたら
- もしセルC3の値が80以上だったら
- セルC3の文字色を色見本3番(赤色)にする
- そうではなく、もしセルC3の値が30以下だったら
- セルC3の文字色を色見本6番(黄色)にする
- Ifステートメント終了
- マクロ記録終了
追加した部分、そうではなく30点以下ならばは、ElseIfから始まる部分です。
これで特定のセルの値が80点以上の場合と30点以下の場合で文字色や背景色を変えることができるようになりました。
このように、「もし~だったら、そうではなくもし~だったら」という、If~Thenステートメントを使う事により、可能となるので、ぜひマスターしたいVBAコードですよね。

繰り返し処理を加えて実用的に色変更
ここまでは1か所のセルだけを調べて値により、文字色や背景色を変えましたが、テストの点数ならば受験者が1人ってことないですよね。複数名いるので全員の点数を調べて条件に合致した人だけ色を変える方が実用的です。
もちろん先ほどの「もし80点ならば、そうでなく30点以下ならば」でのVBAコードを全員分コピーして書き続ければできますが、時間の無駄な作業になりますので、繰り返し処理のFor~Nextを使いましょう。
複数のセルの値を条件によりまとめて色変更
ここではC3~C12に点数が入っていて、それぞれ80点以上ならば背景色赤色、30点以下ならば黄色としましょう。
Private Sub CommandButton1_Click()
For i = 3 To 12
If Cells(i, 3).Value >= 80 Then
Cells(i, 3).Interior.ColorIndex = 3
ElseIf Cells(i, 3).Value <= 30 Then
Cells(i, 3).Interior.ColorIndex = 6
End If
Next i
End Sub
- コマンドボタン1が押されたら
- 繰り返し処理の変数「i」を宣言し、3~12を代用する
- もしセル番号(i行の3列目)の値が80以上だったら
- セル番号(i行目の3列目)の文字色を色見本3番(赤色)にする
- そうではなくもしセル番地(i行目の3列目)の値が30以下だったら
- セル番地(i行目の3列目)の文字色を色見本6番(黄色)にする
- Ifステートメント終了
- 変数「i」が終わるまで繰り返す
- マクロ記録終了
繰り返し処理の時はセルを示すRangeが使えないので「Cells」を使い(i,3)で、変数iが行番号3~12に変化してセルC3~C12まで順番に点数を見て条件に合えば色を変えてくれるようになります。
判定評価が2つでしたが、通知表みたいに5段階評価したいとなると、If~Thenでもできないことは無いですが、VBAコードがすごく長くなってしまうので、スッキリさせる条件分岐するSelect Caseステートメントを使いましょう。

これでまとめて一括でセルの色を変える事ができるようになりましたね。
このような使い方が実際のところ一番多いです。
さらに、応用でユーザーフォームのラベルも同じようにまとめて色変更できるようになるとデータリストアップするのに便利ですよ。

条件によって文字色や背景色ができるようになったら、文字サイズや行の高さ・列の幅も変更できるようになると見栄えが良くなりますよ。