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

エクセルVBAセルの操作 セルの操作
スポンサーリンク

エクセルで成績表や日付があると文字の色やセルの背景色を変えたいと思いませんか

例えば、テストの成績表で80点以上ならば赤色文字にまたはセルの背景色をピンク色とかに変えられたら見栄えが良くなりますよね。

ここでは、ユーザーフォームに配置したコマンドボタンを押すことにより、80点以上の人を探して条件に一致したらセルの文字色や背景色を変えられるようにしましょう。

スポンサーリンク

指定したセルの文字・背景色を変更方法

まずは基本的な文字色や背景色の変更方法から順におさらいしておきましょう。

ここではユーザーフォームに配置したコマンドボタンにVBAコードを書き込みます。

指定したセルの文字色を変更する

例えば、セルA1の文字色を初期設定の黒色を赤色に指定しましょう。

赤色のColorIndex番号は3です。

セルA1の文字色を赤色に指定するVBAコード

Private Sub CommandButton1_Click()
Range(“A1”).Font.ColorIndex = 3
End Sub

VBA解説
  1. コマンドボタン1が押されたら
  2. セルA1の文字色を色見本の3番(赤色)にする
  3. マクロ記録終了

ついでに文字色変更するには、Font.ColorIndexの他にRGBで指定することもできます。

RGBで指定して文字色変更

Private Sub CommandButton1_Click()
Range(“A1”).Font.Color = RGB(255, 0, 0)
End Sub

どにらも文字色を赤色に変更できます。

VBA解説
  1. コマンドボタン1が押されたら
  2. セルA1の文字色をRGB色配合の組み合わせで表す(赤色)
  3. マクロ記録終了
<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

ちなみにColorIndexには色見本というのがあり、56種類の色見本です

決まった範囲のセルの文字色を変える

色を変更したいセルは常に1か所ではなくある一定の範囲で指定したい時がありますので、ここではセルの範囲(A1~C3)を全て赤色に変えてみましょう。

指定範囲のセルの文字色変更

Private Sub CommandButton1_Click()
Range(“A1:C3”).Font.ColorIndex = 3
End Sub

VBA解説
  1. コマンドボタン1が押されたら
  2. セルA1からC3の範囲の文字色を色見本の3番(赤色)にする
  3. マクロ記録終了

もちろんRGBも同じようにできます。

指定したセルの背景色を変更する

今度は背景色ですが、文字色とほぼ同じで文字を表すFontを背景を表すInteriorに変えるだけですよ。

セルA1の背景色を変える

Private Sub CommandButton1_Click()
Range(“A1”).Interior.ColorIndex = 3
End Sub

では続けてRGBにして、範囲をA1:C3で色を青色にしましょう。

背景色を青色にRGBで指定

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

基本的な文字色・背景色は大丈夫ですね。

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

次は実用的する為にテストの点数が80点以上ならば赤色に文字色を替えてみましょう。

1つの条件により文字色を変える

テストの点数が80以上の時に文字色を変えるという事は、もし80点以上だったらと言い換えられますので、If~Thenを使います。

C3の値が80点以上の時赤色文字

Private Sub CommandButton1_Click()
If Range(“C3”).Value >= 80 Then
Range(“C3”).Font.ColorIndex = 3
End If
End Sub

VBA解説
  1. コマンドボタン1が押されたら
  2. もしセルC3の値が80以上だったら
  3. セルC3の文字色を色見本3番(赤色)にする
  4. Ifステートメント終了
  5. マクロ記録終了

「>=80」で80点以上を表し、条件に合えば、赤色文字にしてそうではない場合(80点未満)は何もしない(色を変えない)という事ですね。

ここまでやったら、80点以上の条件に付けくわえて30点以下は背景色黄色を追加してみませんか?

2つの条件によりそれぞれセルの色を変える

もし80点ならば、そうでなく30点以下ならば

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

VBA解説
  1. コマンドボタン1が押されたら
  2. もしセルC3の値が80以上だったら
  3. セルC3の文字色を色見本3番(赤色)にする
  4. そうではなく、もしセルC3の値が30以下だったら
  5. セルC3の文字色を色見本6番(黄色)にする
  6. Ifステートメント終了
  7. マクロ記録終了

追加した部分、そうではなく30点以下ならばは、ElseIfから始まる部分です。

これで特定のセルの値が80点以上の場合と30点以下の場合で文字色や背景色を変えることができるようになりました。

このように、「もし~だったら、そうではなくもし~だったら」という、If~Thenステートメントを使う事により、可能となるので、ぜひマスターしたいVBAコードですよね。

スポンサーリンク

繰り返し処理を加えて実用的に色変更

ここまでは1か所のセルだけを調べて値により、文字色や背景色を変えましたが、テストの点数ならば受験者が1人ってことないですよね。複数名いるので全員の点数を調べて条件に合致した人だけ色を変える方が実用的です。

もちろん先ほどの「もし80点ならば、そうでなく30点以下ならば」でのVBAコードを全員分コピーして書き続ければできますが、時間の無駄な作業になりますので、繰り返し処理のFor~Nextを使いましょう。

複数のセルの値を条件によりまとめて色変更

ここではC3~C12に点数が入っていて、それぞれ80点以上ならば背景色赤色、30点以下ならば黄色としましょう。

For~Nextで繰り返し

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

VBA解説
  1. コマンドボタン1が押されたら
  2. 繰り返し処理の変数「i」を宣言し、3~12を代用する
  3. もしセル番号(i行の3列目)の値が80以上だったら
  4. セル番号(i行目の3列目)の文字色を色見本3番(赤色)にする
  5. そうではなくもしセル番地(i行目の3列目)の値が30以下だったら
  6. セル番地(i行目の3列目)の文字色を色見本6番(黄色)にする
  7. Ifステートメント終了
  8. 変数「i」が終わるまで繰り返す
  9. マクロ記録終了

繰り返し処理の時はセルを示すRangeが使えないので「Cells」を使い(i,3)で、変数iが行番号3~12に変化してセルC3~C12まで順番に点数を見て条件に合えば色を変えてくれるようになります。

判定評価が2つでしたが、通知表みたいに5段階評価したいとなると、If~Thenでもできないことは無いですが、VBAコードがすごく長くなってしまうので、スッキリさせる条件分岐するSelect Caseステートメントを使いましょう。

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

これでまとめて一括でセルの色を変える事ができるようになりましたね。

このような使い方が実際のところ一番多いです。

 

さらに、応用でユーザーフォームのラベルも同じようにまとめて色変更できるようになるとデータリストアップするのに便利ですよ。

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

スポンサーリンク

セルの操作関連の参考VBA集

みんなが疑問に思ってたりで良く調べられているセル関連のVBAコードで、今週よく見られている5つのページなので、参考になれば幸いです。

エクセルVBAで自動的に連番をつける方法
入力済みのセルの最終行の下に新しく入力する方法
VBAで条件により文字色や背景色をまとめて変える
空白セルに0を選択範囲まとめて入力
エラー回避して範囲内の空白セルを見つけたら上方向に詰める

記念日などに文字に〇丸印や♡をつける

文字色や背景色を変えたついでに、〇をつけたりしてもっと目立たせたくないですか?

ちょっとひと工夫すると、約130種類のデザインから選んでオリジナリティーあふれるカレンダーを作ってみましょう。