【VBA】色を変える方法~サンプルコードや図を使ってVBA初心者でもわかりやすく解説~

 

セルの色の塗りつぶしやフォントの色の変種を自動化したい!

こんな処理はVBAを使えば実現できます。

 

例えば、

大量にあるデータから数値が100以下の場合背景色を黄色にする、期限が過ぎた項目のフォントの色を赤色にする

といった処理もVBAを使えば一瞬で処理できるようになります。

 

色を変えるVBAをマスターすれば、面倒な手作業から解放されます。

「セルの色を1つずつ変えるのに時間がかかる」「条件に応じて自動で色分けしたい」「プロジェクト管理を視覚的にしたい」

といった悩みを持つ方必見です。

 

本記事では、VBA初心者の方でも理解できるよう基本的な色の変更方法からプロ直伝の応用テクニックまで、

実践的なサンプルコードと共に丁寧に解説していきます。

 

VBAを使ってあなたのExcel作業を劇的に効率化しましょう。

 

 

広告

VBAで色を変える基本的な手順

VBAを使って色を変更できるようになれば、

手作業で何度も色を変更する必要がなくなり作業効率を大幅にアップ

させることができます。

 

色を変更するVBAには、大きく分けて3つの方法があります。

  • RGB関数を使用する方法
  • ColorIndexを使用する方法
  • 直接色を指定する

 

それぞれの方法をわかりやすく解説していきます。

 

色を変えるVBAの解説をする前に、セルの書式設定を指定して塗り潰しをするコードを紹介します。

 

セルの書式設定を指定するVBAはInteriorプロパティを使用します。

 

基本コード

Range . Interior . Color = 設定値

 

 

セルの書式設定を指定するVBAを使えば簡単にセルを塗り潰すことが可能です。

サンプルコードがこちら

Sub ChangeColor()
Range("A1").Interior.Color = RGB(255, 0, 0) '赤色に変更
End Sub

 

2行目のコードは、A1セルの背景色を赤色に塗りつぶす

という意味です。

 

Left Caption

ガッツポーズの人

たった1行でセルの塗りつぶしが完了。

 

「RGB値」の使い方

「RGB値」を使って色を変える方法をご紹介します。

 

「RGB値」を使ったサンプルコードがこちら

 

基本コード

Range . Interior . Color = RGB ( red , green , blue )

 

カッコの中のredとgreenとblueにそれぞれ0~255の数字を入れて色を調整します。

 

「RGB値」を使ってA1セルを塗り潰すサンプルコードがこちら

Sub test()
Range("A1").Interior.Color = RGB(255,0,0) 'A1セルを赤色に塗りつぶす
Range("A1").Interior.Color = RGB(0,255,0) 'A1セルを緑色に塗りつぶす
Range("A1").Interior.Color = RGB(0,0,255) 'A1セルを青色に塗りつぶす
End Sub

 

RGB値はExcelのツールで簡単に調べることができます。

RGB値を調べる方法を示したイラスト

 

 

色の設定で下に出てくのがRGBの数値なので、ここでRGB数値を調べてコードに書き込むというやり方がおすすめです。

 

RGB値を使ってパステルピンクを指定するサンプルコードはこちら

Sub PastelPink()
Range("A1").Interior.Color = RGB(255, 182, 193) 'パステルピンク
End Sub

 

RGB値を細かく指定することでどんな配色でも実現可能です。

 

「ColorIndex」の使い方

「ColorIndex」を使って色を変える方法をご紹介します。

 

「ColorIndex」を使ったサンプルコードがこちら

 

基本コードは

Range . Interior . ColorIndex = 整数

 

整数は1~56の数値で色を指定することができます。

 

例えば

Range(”A1”).Interior.ColorIndex = 1

はA1セルを黒色に塗りつぶす。

 

Range(”A1”).Interior.ColorIndex = 2

はA1セルを白色に塗りつぶす。

 

Range(”A1”).Interior.ColorIndex = 3

はA1セルを赤色に塗りつぶす。

です。

 

インデックス番号に対応する色を確認するためのサンプルコードがこちら

Sub test()
For i = 1 To 56
Range("A" & i) = i
Range("B" & i).Interior.ColorIndex = i
Next
End Sub

2行目のコードは、変数 i に1から56の数値を格納する

3行目のコードは、変数 i の数値をA列に表示する

4行目のコードは、A列のセルの色を変える

です。

 

実行結果はこちら

ColorIndexを使ったVBAの実行結果を示したイラスト

 

 

使いたい色のColorIndex番号を調べてVBAを作ってみてください。

 

「直接色を指定するVBA」の使い方

「直接色を指定するVBA」を使って色を変える方法をご紹介します。

 

「直接色を指定するVBA」の基本コードはこちら

 

基本コードは

Range . Interior . Color = 色の指定

 

 

「直接色を指定するVBA」を使ってセルを塗り潰すサンプルコードがこちら

Sub test()
Range("A1").Interior.Color = vbRed 'A1セルを赤色に塗りつぶす
Range("B1").Interior.Color = vbGreen 'B1セルを緑色に塗りつぶす
Range("C1").Interior.Color = vbBlue 'C1セルを青色に塗りつぶす
End Sub

 

2行目のコードは、A1セルを赤色に塗り潰す

3行目のコードは、B1セルを緑色に塗り潰す

4行目のコードは、C1セルを青色に塗り潰す

です。

 

「色の指定」に入るコメント一覧がこちら

vbBlack
vbWhite
vbRed
vbBlue
vbGreen
vbYellow

 

「直接色を指定する方法」よりも「RGB値での色を指定する方法」の方が細かく色の調整ができるので、私はRGB値をよく使用しています。

 

Left Caption

ガッツポーズの人

いろいろ試して自分に合った方法を模索してみてください。

 

使用頻度の高い『色を変えるVBA』

 

業務でよく使用する『色を変えるVBA』をまとめました。

これらのコードを使いこなせるようになれば、日常的な作業の多くを自動化できます。

 

セルの背景色を変更するサンプルコード

セルの背景色を変更するには、Interiorプロパティを使用します。

特に重要なデータを目立たせたい場合や、データの種類ごとに色分けしたい場合に便利です。

 

選択中のセルの背景色を黄色に変えるサンプルコードがこちら

Sub ChangeBackgroundColor()
Selection.Interior.Color = RGB(255, 255, 0) '黄色に変更

'ColorIndexを使用する場合
'Selection.Interior.ColorIndex = 6 '黄色
End Sub

 

2行目のコードは、選択中のセルの色を黄色に塗りつぶす

という意味です。

 

実行結果

選択中のセルの背景色を変えるVBAの実行結果を示したイラスト

 

文字色を変更するサンプルコード

選択したセル範囲のフォントの色を赤色に変更し、さらに太字に変更するサンプルコードはこちら

Sub ChangeFontColor()
With Selection.Font
.Color = RGB(255, 0, 0) '赤色に変更
.Bold = True '太字に設定
End With
End Sub

 

2行目のコードは、With構文で選択中のフォントを指定する

3行目のコードは、フォントを赤色に変える

4行目のコードは、フォントを太字に変える

という意味です。

 

サンプルコード内で使われているWith構文は、関連記事「With構文を5分で完全理解!」で使い方が解説されています。

 

 

効率的なVBAコードを書きたい!という方は併せてチェックしてください。

 

条件付き書式で色を変更する方法

条件付き書式をVBAで設定することで、特定の条件に合致するセルの色を自動的に変更できます。

 

サンプル事例として

数値が100以上のセルを緑色に100未満のセルを赤色に変更する条件付き書式を設定する

をVBAで処理します。

条件付き書式を設定するVBAの概要を示したイラスト

サンプルコードがこちら

Sub ConditionalFormatting()
Range("A1:A10").FormatConditions.Delete '既存の条件付き書式をクリア

With Range("A1:A10").FormatConditions.Add(Type:=xlCellValue, Operator:=xlGreaterEqual, Formula1:="100")
.Interior.Color = RGB(0, 255, 0) '緑色
End With

With Range("A1:A10").FormatConditions.Add(Type:=xlCellValue, Operator:=xlLess, Formula1:="100")
.Interior.Color = RGB(255, 0, 0) '赤色
End With
End Sub

2行目のコードは、A1セルからA10セルの範囲で現在設定されている条件付き書式をリセットする

4行目から6行目のコードは、A1セルからA10セルの範囲で100以上の数値が入力された場合セルを緑色に変える

8行目から10行目のコードは、A1セルからA10セルの範囲で100未満の数値が入力された場合セルを赤色に変える

という意味です。

 

条件付き書式は、

VBAを実行せずに数値を変えた時点で色を変更できる

というメリットがあります。

 

引数Targetを使えば、条件付き書式のような「値を操作しただけで色を変化させる」処理が可能です。

関連記事「Targetの使い方」では、

セルを操作したら作成したVBAを実行する、セルの値を変えたら作成したVBAを実行する、

方法が解説されています。

 

 

条件付書式を設定せずVBAだけでセルの色を変えたい!という方は参考にしてみてください。

 

『色を変えるVBA』の応用テクニック

 

色を変える基本操作を理解したら、次は応用的なテクニックを習得していきましょう。

複数のセルを一括で処理したり、条件に基づいて色を変更したりすることで、より効率的な作業が可能になります。

 

これらのテクニックを使いこなすことで、エクセル作業の効率を格段にアップさせることが可能です。

 

複数のセルの色を一括で変更する方法

大量のデータを扱う場合、セルを1つずつ処理していては時間がかかってしまいます。

 

サンプル事例として

指定した範囲内の特定の文字列を含むセルの色を一括で変更するVAB

を紹介します。

 

「重要」という文字が含まれるテキストのセルの色を変えるVBAの概要を示したイラスト

 

A1セルからE10セルの範囲で、「重要」という文字が含まれるテキストのセルの色を黄色に変える

という処理を行います。

 

サンプルコードはこちら

Sub BulkColorChange()
Dim cell As Range
For Each cell In Range("A1:E10")
If InStr(cell.Value, "重要") > 0 Then
cell.Interior.Color = RGB(255, 255, 0) '黄色
End If
Next cell
End Sub

 

3行目のコードは、A1セルからE10セルの範囲を繰り返す

4行目のコードは、文字列に「重要」が含まれる場合5行目のコードを実行する

5行目のコードは、セルの色を黄色に変える

という意味です。

 

Instr関数と『色を変えるVBA』を組み合わせることで、

特定の文字列を検索し該当するセルの色を変える処理を自動化する

処理を実現しています。

 

サンプルコード内で使われているInstr関数については関連記事「VBAで文字列を切り出しする方法」で使い方が紹介されています。

 

 

エクセル業務でよく使われるVBAを使って文字列を自由に操作・検索する方法が解説されていているので併せてチェックしてみてください。

 

特定の条件に基づいて色を変更する方法

データの値や内容に応じて自動的に色を変更することで、編集ミスを防止しつつ作業効率を大幅にアップさせることができます。

 

サンプル事例として

セルの値が数値か文字列かを判定し、それぞれ異なる色を設定するVBA

を紹介します。

数値を判別してセルの色を変えるVBAの概要を示したイラスト

 

選択中のセル範囲で、「正の数字」なら緑色、「負の数字」なら赤色、「テキスト」なら青色に変える

という処理を行います。

 

サンプルコードはこちら

Sub ChangeColorByCondition()
Dim cell As Range
For Each cell In Selection
If IsNumeric(cell.Value) Then
If cell.Value > 0 Then
cell.Interior.Color = RGB(144, 238, 144) '薄緑色(正の数)
ElseIf cell.Value < 0 Then
cell.Interior.Color = RGB(255, 182, 193) '薄赤色(負の数)
End If
Else
cell.Interior.Color = RGB(173, 216, 230) '薄青色(文字列)
End If
Next cell
End Sub

3行目のコードは、選択中のセルを繰り返し指定する

4行目のコードは、選択したセルが数字の場合以下のコードを処理する

5行目から12行目までのコードは、0より大きい場合セルの背景色は緑色、0より小さい場合セルの背景色は赤色、、数値ではない場合セルの背景色は青色にする

という意味です。

 

Left Caption

ガッツポーズの人

文字列なのか数値なのかを一瞬で判別可能

 

『色を変えるVBA』でよくあるエラーと対処法

『色を変えるVBA』の使用で発生するエラーの多くは範囲の指定ミスや型の不一致が原因です。

これらのエラーを適切に処理することでより安定したマクロを作成することができます。

 

ここからは、VBA初心者がつまずきやすいポイントを中心に解決方法を詳しく説明していきます。

 

エラーが発生する主な原因

色を変えるVBAの使用で発生するエラーのほとんどが、

保護されたシートへの実行

です。

 

エラーハンドリングを実装したサンプルコードがこちら

Sub ErrorHandling()
On Error Resume Next
Range("A1").Interior.Color = RGB(255, 0, 0)

If Err.Number <> 0 Then
MsgBox "色の変更に失敗しました。シートが保護されていないか確認してください。"
Err.Clear
End If
On Error GoTo 0
End Sub

2行目のコードは、エラーが発生した場合、エラーコードの次のコードから処理を再開する

5行目のコードは、エラーが発生している6行目以下の処理を実行する

6行目のコードは、「色の変更に失敗しました。シートが保護されていないか確認してください。」というテキストボックスを表示する

7行目のコードは、発生したエラーをクリアする

9行目のコードは、2行目で宣言したエラーを無視するコードを元に戻す

という意味です。

 

デバッグの方法

エラーが発生した際の原因特定を容易にするため、デバッグ用のコードを組み込みましょう。

 

効率よくデバックできるサンプルコードがこちら

Sub DebugColorChange()
Dim targetCell As Range
Set targetCell = Range("A1")

Debug.Print "現在の背景色: " & targetCell.Interior.Color

targetCell.Interior.Color = RGB(255, 255, 0)

Debug.Print "変更後の背景色: " & targetCell.Interior.Color
End Sub

 

5行目のコードは、A1セルの色情報をイミディエイト欄にカラー定数で表示する

7行目のコードは、A1セルの背景色を黄色に変える

9行目のコードは、A1セルの色情報(黄色)をイミディエイト欄にカラー定数で表示する

という意味です。

 

実行結果がこちら

デバックのしやすいコードを実装した色を変えるVBAの実行結果を示したイラスト

 

実行中の状態を確認できるのでデバックの効率がアップします。

 

関連記事「VBA初心でもできるデバックの方法」では、デバックを効率的に行う方法が紹介されています。

 

 

頑張って作成したVBAがうまく動かなくて困っているという方は是非参考にしてみてください。

 

トラブルシューティングのポイント

エラーが発生した際の対処方法をまとめたコードを作成しておくと便利です。

 

エラーの発生を予防するコードが実装されたサンプルコードがこちら

Sub TroubleshootingExample()
'シートの保護状態を確認
If ActiveSheet.ProtectContents Then
MsgBox "シートが保護されています。保護を解除してから実行してください。"
Exit Sub
End If

'セルの選択状態を確認
If Selection.Count > 1000 Then
If MsgBox("多数のセルが選択されています。処理に時間がかかる可能性があります。続行しますか?", _
vbYesNo) = vbNo Then Exit Sub
End If

'色変更を実行
Selection.Interior.Color = RGB(255, 255, 0)
End Sub

 

3行目から6行目までのコードは、シートが保護されているとき「シートが保護されています。保護を解除してから実行してください」というメッセージを表示する。

9行目から12行目までのコードは、選択中のセルが1000個より多いときメッセージを表示し「Yes」「No」のボタンを表示する。

15行目のコードは、選択中のセルを黄色に変える。

という意味です。

 

エラーに繋がる処理を実行する前にメッセージを表示させ確認を求めることで不要なエラー発生を防ぐことができます。

 

実践的な『色を変えるVBA』のサンプル事例集

 

これまで学んだ技術を組み合わせて、実務で使える実践的なマクロを作成していきましょう。

ここからは、よくある業務シーンで活用される『色を変えるVBA』の導入方法を紹介します。

 

売上データの条件付き色分け

売上データの分析では、目標達成状況を視覚的に把握できることが重要です。

 

サンプル事例として

売上目標の達成率に応じて色分けを行い、データの傾向を瞬時に把握できるVBA

を紹介します。

 

こんな感じ

条件によって売上データの色分けをするVBAの概要を示したイラスト

 

B列の売上金額の内容から色分けを行います。

 

サンプルコードがこちら

Sub SalesDataColorCoding()
Dim cell As Range
Dim targetRange As Range

'対象範囲を設定
Set targetRange = Range("B2:B100") '売上データの範囲

For Each cell In targetRange
With cell
Select Case .Value
Case Is >= 1000000 '100万円以上
.Interior.Color = RGB(0, 176, 80) '緑色
.Font.Color = RGB(255, 255, 255) '白文字
Case Is >= 500000 '50万円以上
.Interior.Color = RGB(255, 255, 0) '黄色
.Font.Color = RGB(0, 0, 0) '黒文字
Case Is < 500000 '50万円未満
.Interior.Color = RGB(255, 199, 206) '薄い赤
.Font.Color = RGB(156, 0, 6) '濃い赤
End Select
End With
Next cell
End Sub

 

6行目のコードは、B2セルからB100セルを範囲指定する

8行目のコードは、6行目で指定した範囲内のセルを繰り返す

9行目から21行目までのコードは、売上金額の内容によってセルの色、フォントの色を変える

という意味です。

 

実行結果がこちら

条件によって売上データの色分けをするVBAの実行結果を示したイラスト

 

 

Left Caption

ガッツポーズの人

背景色の変更、フォントの色の変更を一瞬で処理できるので、データ分析作業の効率がアップ

 

タスク管理表の進捗状況の可視化

プロジェクト管理において、タスクの進捗状況を色で管理することで遅延しているタスクを簡単に特定できます。

 

サンプル事例として

期限と進捗状況に基づいて自動的に色分けを行うVBA

を紹介します。

 

こんな感じ

期限を色分けするVBAの概要を示したイラスト

 

D列の期限を今日の日付(Today関数)から換算して色分けを行います。

 

サンプルコードはこちら

Sub TaskProgressVisualization()
Dim cell As Range
Dim today As Date
today = Date
For Each cell In Range("D2:D50") '期限列
With cell
If Not IsEmpty(.Value) Then
Select Case DateDiff("d", today, .Value)
Case Is < 0 '期限切れ 
.Interior.Color = RGB(255, 0, 0) 
Case 0 To 7 '1週間以内 
.Interior.Color = RGB(255, 192, 0) 
Case Is > 7 '1週間以上余裕あり
.Interior.Color = RGB(146, 208, 80)
End Select
End If
End With
Next cell
End Sub

 

4行目のコードは、今日の日付を変数todayに格納する

5行目のコードは、D2セルからD50セルを範囲指定する

7行目のコードは、指定するD列のセルが空白ではないときに以下のコードを実行する

8行目のコードは、今日の日付からDセルの日付を引いた日数を計算する

9行目から15行目のコードは、8行目のコードの結果が0日未満の場合は赤色、0日から7日の場合はオレンジ色、7日から14日の場合は緑色にする

という意味です。

 

 

実行結果がこちら

期限を色分けするVBAの実行結果を示したイラスト

 

期日を色分けして目立たせることで、仕事の優先順位を明確にすることができます。

 

Left Caption

ガッツポーズの人

予定のすっぽかし、仕事のやり忘れの防止に活用できる。

 

チェックリストの自動色付けプログラム

チェックリストの各項目の状態を色で管理することで、作業の進捗状況が一目で分かるようになります。

 

サンプル事例として

ステータスの内容に応じて行の色分けを行うVBA

を紹介します。

 

こんな感じ

ステータスの内容で行の色分けをするVBAの概要を示したイラスト

 

C列にステータスの内容「完了」「進行中」「未着手」「保留」のテキスト内容から行の色分けを行います。

 

サンプルコードがこちら

Sub ChecklistAutoColoring()
Dim ws As Worksheet
Dim lastRow As Long

Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

For i = 2 To lastRow
With ws.Rows(i)
Select Case ws.Cells(i, "C").Value 'ステータス列
Case "完了"
.Interior.Color = RGB(198, 239, 206) '薄緑
Case "進行中"
.Interior.Color = RGB(255, 235, 156) '薄黄
Case "未着手"
.Interior.Color = RGB(255, 199, 206) '薄赤
Case "保留"
.Interior.Color = RGB(191, 191, 191) 'グレー
End Select
End With
Next i
End Sub

 

6行目のコードは、A列の最終行を変数lastRowに格納する

8行目のコードは、2行目からA列の最終行分を繰り返す

10行目から20行目までのコードは、ステータスの内容が「完了」の場合緑色、「進行中」の場合黄色、「未着手」の場合赤色、「保留」の場合グレーにする

という意味です。

 

実行結果がこちら

ステータスの内容で行の色分けをするVBAの実行結果を示したイラスト

 

このように、実務で使用する具体的なシーンに合わせてVBAコードをカスタマイズすることで、

業務効率を大幅に改善することができます。

 

本記事で紹介してきたコードは基本的な例ですが、

あなたが処理している実際の業務に合わせて機能を追加したり条件を変更したりする

ことでより実用的なツールとして活用できるはずです。

 

最も有効な手段としては、

紹介してきた複数のVBAをみ合わせること

です。

 

例えば、

売上データの色分けと進捗管理を組み合わせて部門ごとの実績を視覚的に管理するステータス管理と期日管理を組み合わせてスケジュール表を作成する、など

『色を変えるVBA』を使いこなすことで、業務内容に合わせた唯一無二のビジネスツールとしての活用が可能になるでしょう。

 

いかがでしたでしょうか。

 

この記事を読んで、

VBAで日々のルーティーン作業を自動化したい!

と感じてくれた方はマメBlogのエクセルマクロ開発代行サービスの利用を検討してみてください。

 

 

Left Caption

ガッツポーズの人

この記事で紹介している『色を変えるマクロ』を扱っているエクセルに設定することもできます。

 

「今やっている業務にも設定できるの?」「費用はどれくらいかかるの?」など、いろんな疑問があるかともいます。

ご相談、お見積りの依頼は無料ですのでお気軽にお問い合わせください。

 

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa