Excel 文字色や背景色を取得する②
- ゆった
- 7月24日
- 読了時間: 4分

はじめに
こんにちは、ティーマネジメントのゆったです。
日差しの厳しい季節になりましたが、毎年夏前には赤紫蘇シロップを作って紫蘇ジュースを楽しんでいます♪
赤紫蘇を煮出してお砂糖を溶かし最後にレモン汁を入れるのですが、お鍋に入った黒っぽい紫が驚くほど鮮やかな赤紫に変わるのを見ると「夏が来たなあ」という気分になります🌻🌻🌻
***
今回は前回に引き続き、VBAで色を使った条件を使用する方法をご紹介します。
前回の記事でマクロを使った色の取得方法についてをお伝えしましたので、
今回は、取得した色の定数を使用して条件を分岐させる方法についてご説明したいと思います!
色で条件分岐させる
カラーインデックスとは
復習になりますが、色は「範囲.Font.ColorIndex」または「範囲.Font.Color」で取得することができます。
まずは「範囲.Font.ColorIndex」を使って色名を入力させるマクロを作成してみましょう。

※Excelのカラーインデックスに登録されている色は、
ファイル > オプション > 保存 > (ブックの外観の保持) 色 を開くと確認できます。

標準の色と対応するカラーインデックス番号は下図の通りです。

カラーインデックスを使用した色の分岐
まずはよく使用される1~10番のカラーインデックスで分岐を作ってみましょう。
下記がA1セルに入力されている背景色の色名をB1セルに書き出すVBAです。
Sub 背景色の色名を判定()
Dim 背景色 As Long
Dim 出力先 As Range
'結果の出力先のセルを設定する
set 出力先 = Range("B1")
'A1セルの背景のカラーインデックスを取得する
背景色 = Range("A1").Interior.ColorIndex
'B1セルに取得したカラーインデックスを入力する
Range("B1") = 背景色
'C1セルに色名を入力
Select Case 背景色
Case 1
出力先 = "黒"
Case 2
出力先 = "白"
Case 3
出力先 = "赤"
Case 4
出力先 = "黄緑"
Case 5
出力先 = "青"
Case 6
出力先 = "黄"
Case 7
出力先 = "ピンク"
Case 8
出力先 = "水"
Case 9
出力先 = "茶"
Case 10
出力先 = "緑"
Case Else
出力先 = "不明"
End Select
End Sub
A1セルを塗り替えてマクロを実行した結果が下図になります。
色数は限定されますが、しっかり色名が入力されることがわかります。

応用編 色の系統を判別させる
カラーインデックスを使うと簡易に色の判別は可能ですが、設定していない色があると正しい結果を返すことができません。
多くの色を使用したい場合などの汎用性を高める一案として、RGBを取得して赤緑青のどの色が強いかで判別をさせる方法があります。
つまり、
R (レッド) が最も大きい数値であれば "赤系統"
G (グリーン) が最も大きい数値であれば "緑系統"
B (ブルー) が最も大きい数値であれば "青系統"
そして、この三色の値が同じであれば "灰系統" と結果が返るようにしたいと思います。
ではさっそく、A列にいろいろな背景色を並べて判定できるVBAを作ってみましょう。
※RGBの取得方法については前回の記事を参照してください
Sub 背景色の色系統を調べる2()
Dim 行 As Long
Dim 背景色 As Long
Dim R As Integer
Dim G As Integer
Dim B As Integer
Dim 結果 As String
'行に初期値の1を設定
行 = 1
'A列の背景色が無色になるまで繰り返す
Do While Cells(行, "A").Interior.ColorIndex <> xlNone
'A列の背景色を取得し、RGBの数値を計算する
背景色 = Cells(行, "A").Interior.Color
R = 背景色 Mod 256
G = Int(背景色 / 256) Mod 256
B = Int(背景色 / 256 / 256)
'RGBの割合で色の系統を判定する
If R = G And G = B And B = R Then 'RGBの値が同一の場合
結果 = "灰系統"
ElseIf R > G And R > B Then 'Rの値が最も大きい場合
結果 = "赤系統"
ElseIf G > R And G > B Then 'Gの値が最も大きい場合
結果 = "緑系統"
ElseIf B > R And B > G Then 'Bの値が最も大きい場合
結果 = "青系統"
End If
'B列に結果を入力する
Cells(行, "B") = 結果
行 = 行 + 1
Loop
End Sub
上記を実行すると下図の結果が出力されます。
カラーインデックスの分岐よりずっと複雑にはなりますが、特定の色に対する分岐ではなくどんな色が設定されるかわからない場合にはこういった幅を持たせる工夫も必要です。

さいごに
色を取得したり、条件に使用したりすることは難しいことではないのですが、
「何色か」を判定させるにはかなり複雑な条件分岐が必要になります。
また、前回の記事でも触れましたが、多くの色を使用するとユーザーを混乱させるリスクもあります。
そのため、VBAによる自動化を行う前にExcelで使用している色の整理を行うことも大切です。
ティーマネジメントではExcelやVBAに慣れていない方でもスムーズに自動化できるお手伝いをしておりますので、
お困りごとやご相談がありましたら、お気軽にぜひお問い合わせください❁❁❁