カテゴリや種別が設定されたデータにおいて、
種別ごとに色分けを行いたいことが良くあります。

この背景色を自動で設定する方法となると、
条件付き書式を設定するのが第1候補になりますね。
しかし種別が多くなると条件付き書式は設定が面倒で、
コピー時の挙動や増殖問題、再計算の重さもネックになります。
ということで、今回は条件付き書式を使用せず、マクロで対応する方法を解説します。
セルの値変更を検知して自動で背景色を設定する
まずは「セルの値変更を検知して自動で着色する」マクロを紹介します。
セルの値変更を検知するイベントプロシージャ、
Worksheet_Changeイベントを使用します。
ソースコード(対象のシートモジュールに記載)
' セルの値変更時のイベント Private Sub Worksheet_Change(ByVal Target As Range) ' 着色処理を行うセル範囲の設定 Dim 対象セル範囲 As Range Set 対象セル範囲 = Range("C:C") ' 値の変更があったセルとの重複エリアに対して処理 Dim 着色セル範囲 As Range Set 着色セル範囲 = Intersect(Target, 対象セル範囲, Me.UsedRange) If 着色セル範囲 Is Nothing Then Exit Sub ' 処理対象範囲の全セルをループ Dim 着色セル As Range For Each 着色セル In 着色セル範囲 ' 値ごとに着色 Select Case 着色セル.Value Case "ノーマル": 着色セル.Interior.Color = RGB(153, 153, 153) Case "くさ": 着色セル.Interior.Color = RGB(66, 191, 37) Case "ほのお": 着色セル.Interior.Color = RGB(253, 99, 42) Case "みず": 着色セル.Interior.Color = RGB(42, 145, 254) Case "でんき": 着色セル.Interior.Color = RGB(253, 220, 0) Case "むし": 着色セル.Interior.Color = RGB(159, 166, 38) Case "ひこう": 着色セル.Interior.Color = RGB(153, 202, 254) Case "いわ": 着色セル.Interior.Color = RGB(188, 184, 140) Case "どく": 着色セル.Interior.Color = RGB(153, 78, 206) Case "じめん": 着色セル.Interior.Color = RGB(170, 124, 58) Case "こおり": 着色セル.Interior.Color = RGB(69, 215, 254) Case "かくとう": 着色セル.Interior.Color = RGB(254, 162, 2) Case "エスパー": 着色セル.Interior.Color = RGB(255, 99, 132) Case "ゴースト": 着色セル.Interior.Color = RGB(112, 68, 114) Case "ドラゴン": 着色セル.Interior.Color = RGB(85, 98, 212) Case "あく": 着色セル.Interior.Color = RGB(80, 69, 73) Case "はがね": 着色セル.Interior.Color = RGB(107, 175, 209) Case "フェアリー": 着色セル.Interior.Color = RGB(253, 177, 255) Case "": 着色セル.Interior.ColorIndex = 0 End Select Next End Sub
解説
セルの値変更を検知してマクロを実行するには、
Worksheet_Changeイベントを使用します。
値の変わったセルが引数Targetに格納されていますが、
Targetにはセル範囲が入っている可能性もあります。
事前にTargetと着色対象範囲の重複部分をIntersectで取得しておき、
対象のセルをFor Eachでひとつずつループして処理してください。
その際、対象シートの使用範囲(UsedRange)もIntersectにセットで渡すことで、
列全体をクリアしたときに処理が重くなる対策もできますので覚えておきましょう。
肝心の色分けはSelect Caseで愚直に分岐しているコードです。
こういった単純かつ数の多い分岐はIfステートだとかなり冗長になります。
Select Caseステートメントを使用するとスッキリ書くことができますので、
しっかり使い分けれるようになっておきましょう。
余談ですが、「:」の後にスペースを挿入できることを利用し、
↓こんな風にインデントをそろえることができます。

等幅フォントにしないとできないことなのですが、
設定するとかなりコードが見やすくなります。
(ブラウザは等幅フォントに出来ないため本記事では設定していません)
気に入ったら等幅フォントとセットで採用してみてください。
色の指定方法とコードの生成
Select Case 内で指定している各色の指定方法には、
以下の3つの方法があります。
お好きな方法を採用してください。
RGB値(255, 255, 255)
※ 冒頭で紹介したコードと同じものです。
' 値ごとに着色 Select Case 着色セル.Value Case "ノーマル": 着色セル.Interior.Color = RGB(153, 153, 153) Case "くさ": 着色セル.Interior.Color = RGB(66, 191, 37) Case "ほのお": 着色セル.Interior.Color = RGB(253, 99, 42) Case "みず": 着色セル.Interior.Color = RGB(42, 145, 254) Case "でんき": 着色セル.Interior.Color = RGB(253, 220, 0) Case "むし": 着色セル.Interior.Color = RGB(159, 166, 38) Case "ひこう": 着色セル.Interior.Color = RGB(153, 202, 254) Case "いわ": 着色セル.Interior.Color = RGB(188, 184, 140) Case "どく": 着色セル.Interior.Color = RGB(153, 78, 206) Case "じめん": 着色セル.Interior.Color = RGB(170, 124, 58) Case "こおり": 着色セル.Interior.Color = RGB(69, 215, 254) Case "かくとう": 着色セル.Interior.Color = RGB(254, 162, 2) Case "エスパー": 着色セル.Interior.Color = RGB(255, 99, 132) Case "ゴースト": 着色セル.Interior.Color = RGB(112, 68, 114) Case "ドラゴン": 着色セル.Interior.Color = RGB(85, 98, 212) Case "あく": 着色セル.Interior.Color = RGB(80, 69, 73) Case "はがね": 着色セル.Interior.Color = RGB(107, 175, 209) Case "フェアリー": 着色セル.Interior.Color = RGB(253, 177, 255) Case "": 着色セル.Interior.ColorIndex = 0 End Select
カラーコード(#FFFFFF)
' 値ごとに着色 Select Case 着色セル.Value Case "ノーマル": 着色セル.Interior.Color = カラーコードをRGB値に変換("#999999") Case "くさ": 着色セル.Interior.Color = カラーコードをRGB値に変換("#42bf25") Case "ほのお": 着色セル.Interior.Color = カラーコードをRGB値に変換("#fd632a") Case "みず": 着色セル.Interior.Color = カラーコードをRGB値に変換("#2a91fe") Case "でんき": 着色セル.Interior.Color = カラーコードをRGB値に変換("#fddc00") Case "むし": 着色セル.Interior.Color = カラーコードをRGB値に変換("#9fa626") Case "ひこう": 着色セル.Interior.Color = カラーコードをRGB値に変換("#99cafe") Case "いわ": 着色セル.Interior.Color = カラーコードをRGB値に変換("#bcb88c") Case "どく": 着色セル.Interior.Color = カラーコードをRGB値に変換("#994ece") Case "じめん": 着色セル.Interior.Color = カラーコードをRGB値に変換("#aa7c3a") Case "こおり": 着色セル.Interior.Color = カラーコードをRGB値に変換("#45d7fe") Case "かくとう": 着色セル.Interior.Color = カラーコードをRGB値に変換("#fea202") Case "エスパー": 着色セル.Interior.Color = カラーコードをRGB値に変換("#ff6384") Case "ゴースト": 着色セル.Interior.Color = カラーコードをRGB値に変換("#704472") Case "ドラゴン": 着色セル.Interior.Color = カラーコードをRGB値に変換("#5562d4") Case "あく": 着色セル.Interior.Color = カラーコードをRGB値に変換("#504549") Case "はがね": 着色セル.Interior.Color = カラーコードをRGB値に変換("#6bafd1") Case "フェアリー": 着色セル.Interior.Color = カラーコードをRGB値に変換("#fdb1ff") Case "": 着色セル.Interior.ColorIndex = 0 End Select
※ 以下の汎用関数を標準モジュールに設置してください。
' カラーコード ⇒ RGB値 Function カラーコードをRGB値に変換(ByVal カラーコード As String) As Long ' 7文字なら先頭記号を除去 If Len(カラーコード) = 7 Then カラーコード = Right(カラーコード, 6) カラーコードをRGB値に変換 = RGB("&H" & Left(カラーコード, 2) _ , "&H" & Mid(カラーコード, 3, 2) _ , "&H" & Right(カラーコード, 2)) End Function
定数定義(Enum)
' 値ごとに着色 Select Case 着色セル.Value Case "ノーマル": 着色セル.Interior.Color = Colorタイプ.ノーマル Case "くさ": 着色セル.Interior.Color = Colorタイプ.くさ Case "ほのお": 着色セル.Interior.Color = Colorタイプ.ほのお Case "みず": 着色セル.Interior.Color = Colorタイプ.みず Case "でんき": 着色セル.Interior.Color = Colorタイプ.でんき Case "むし": 着色セル.Interior.Color = Colorタイプ.むし Case "ひこう": 着色セル.Interior.Color = Colorタイプ.ひこう Case "いわ": 着色セル.Interior.Color = Colorタイプ.いわ Case "どく": 着色セル.Interior.Color = Colorタイプ.どく Case "じめん": 着色セル.Interior.Color = Colorタイプ.じめん Case "こおり": 着色セル.Interior.Color = Colorタイプ.こおり Case "かくとう": 着色セル.Interior.Color = Colorタイプ.かくとう Case "エスパー": 着色セル.Interior.Color = Colorタイプ.エスパー Case "ゴースト": 着色セル.Interior.Color = Colorタイプ.ゴースト Case "ドラゴン": 着色セル.Interior.Color = Colorタイプ.ドラゴン Case "あく": 着色セル.Interior.Color = Colorタイプ.あく Case "はがね": 着色セル.Interior.Color = Colorタイプ.はがね Case "フェアリー": 着色セル.Interior.Color = Colorタイプ.フェアリー Case "": 着色セル.Interior.ColorIndex = 0 End Select
※ 以下の定数定義を標準モジュールに設置してください。
Public Enum Colorタイプ ノーマル = 10066329 くさ = 2473794 ほのお = 2778109 みず = 16683306 でんき = 56573 むし = 2533023 ひこう = 16698009 いわ = 9222332 どく = 13520537 じめん = 3833002 こおり = 16701253 かくとう = 172798 エスパー = 8676351 ゴースト = 7488624 ドラゴン = 13918805 あく = 4801872 はがね = 13741931 フェアリー = 16757245 End Enum
この値はRGB値といい、RGB関数が返す値そのままです。
イミディエイトウィンドウに
?RGB(153, 153, 153)
と入力することで入手できます。
あるいはセルの背景色から直接取得することもでき、
?Selection.Interior.Color
としても入手できます。
いずれにせよひと手間かかりますが、
一度定数定義すると以降のメンテナンスや色変更が楽になりますので、
状況に応じて使い分けてください。
ソースコードの生成
上記の色設定はソースコード上で編集してもよいのですが、
ワークシートを用いてコードを生成する方法もあります。

単に&でつなげただけの関数ですが、
これだけでもかなりメンテナンスが楽になります。
この関数をセットしたファイルをアップしておきますので、
よろしければご活用ください。
色分けCase文コード生成.xlsx(Excelファイルダウンロードリンク)
ちなみに配布ファイルの関数は画像よりちょっと複雑になっていますが、
これは先ほど紹介した「等幅フォントによるインデント揃え」をやっています。
選択範囲に着色を実行するマクロ
イベントプロシージャによる自動着色ではなく、
選択範囲に対して着色を実行するマクロも紹介します。
イベントを使用したくない場合はこちらを使用してください。
ほぼ同じロジックのコードですので解説は割愛します。
Sub 選択範囲のセルを値ごとに色分けする() Dim 対象セル範囲 As Range Set 対象セル範囲 = Selection Dim 着色セル As Range For Each 着色セル In 対象セル範囲 Select Case 着色セル.Value Case "ノーマル": 着色セル.Interior.Color = RGB(153, 153, 153) Case "くさ": 着色セル.Interior.Color = RGB(66, 191, 37) Case "ほのお": 着色セル.Interior.Color = RGB(253, 99, 42) Case "みず": 着色セル.Interior.Color = RGB(42, 145, 254) Case "でんき": 着色セル.Interior.Color = RGB(253, 220, 0) Case "むし": 着色セル.Interior.Color = RGB(159, 166, 38) Case "ひこう": 着色セル.Interior.Color = RGB(153, 202, 254) Case "いわ": 着色セル.Interior.Color = RGB(188, 184, 140) Case "どく": 着色セル.Interior.Color = RGB(153, 78, 206) Case "じめん": 着色セル.Interior.Color = RGB(170, 124, 58) Case "こおり": 着色セル.Interior.Color = RGB(69, 215, 254) Case "かくとう": 着色セル.Interior.Color = RGB(254, 162, 2) Case "エスパー": 着色セル.Interior.Color = RGB(255, 99, 132) Case "ゴースト": 着色セル.Interior.Color = RGB(112, 68, 114) Case "ドラゴン": 着色セル.Interior.Color = RGB(85, 98, 212) Case "あく": 着色セル.Interior.Color = RGB(80, 69, 73) Case "はがね": 着色セル.Interior.Color = RGB(107, 175, 209) Case "フェアリー": 着色セル.Interior.Color = RGB(253, 177, 255) Case "": 着色セル.Interior.ColorIndex = 0 End Select Next End Sub