Excel 文字色や背景色を取得する①
- ゆった
- 12 分前
- 読了時間: 5分

はじめに
こんにちは、ティーマネジメントのゆったです!
本題に入る前に、先日面白いお酒をいただいたので少しご紹介したいと思います。
八海山(八海醸造株式会社)さんがニューヨークにある酒蔵と協力して作られているお酒があるのですが、
中でも「OCCIDENTAL(オクシデンタル)」という変わり種のお酒は、日本酒なのにホップの香りがしてなんとも不思議!ワインのようにも思えるフルーティーな飲み口で、個人的にはウインナーやパンチェッタのような味のしっかりしたお肉に合いそうだと感じました✨
色はうっすらピンクがかっており見た目にも華やかなので、興味のある方はぜひグラスで楽しんでみてください🌸🌸🌸
それでは本題です。
今回から連続でご紹介するのは、Excelに入力されている文字の色や背景の色で、計算をさせたり処理を分岐させる方法です。
データを見やすく色分けしたはいいものの、色ではカウントしたり集計したりできずに困ったことはありませんか?
実はマクロなら色を取得して使って色んな処理を行うことができるのです♪
色の取得
色を使って条件分岐を行うにも、まずはそのセルにどんな色が使用されているのかを調べなければいけません。
そして、マクロ(VBA)で言う色というのはカラーインデックスという色辞典から取得する方法と、RGB(赤緑青)の値を取得する方法がありますが、いずれにしても数値で表します。
例えば、
「黒」ならカラーインデックスでは「1」、RGBでは「0 (R:0 G:0 B:0)」
「赤」ならカラーインデックスでは「3」、RGBでは「255 (R:255 G:0 B:0)」
「青」ならカラーインデックスでは「5」、RGBでは「16711680 (R:0 G:0 B:255)」
といったように表現します。
では実際にVBAではどのように色を取得するかの説明をしたいと思います。
文字色の取得 (カラーインデックス)
まずは文字色のカラーインデックスの番号を取得する方法について説明します。
文字色のカラーインデックスは「範囲.Font.ColorIndex」で取得できるので、
A1セルの文字色のカラーインデックス番号をB1セルに入力する場合は下記のコードになります。
Sub 文字色の取得1()
Dim 色番号 As Long
'A1セルの文字のカラーインデックス番号を取得する
色番号 = Range("A1").Font.ColorIndex
'B1セルに取得したカラーインデックス番号を入力する
Range("B1") = 色番号
End Sub
A1セルに赤文字を入力して実行すると「3」が返ってきました。

つまり、「Range("文字色を変えたいセル").Font.ColorIndex = 3」と設定すれば赤文字にすることができます。
文字色の取得 (RGB)
次に、文字色のRGBを取得する方法です。
RGBを割り出す元のカラー定数は「範囲.Font.Color」で取得できます。
そしてそこからRGBそれぞれの数値を計算するのですが、こちらの詳細は省きますので下記計算式を参考にしてください。
Sub 文字色の取得2()
Dim カラー定数 As Long
Dim R As Integer
Dim G As Integer
Dim B As Integer
'A2セルの文字のカラー定数を取得する
カラー定数 = Range("A2").Font.Color
'カラー定数からRGBの数値を計算する
R = カラー定数 Mod 256
G = Int(カラー定数 / 256) Mod 256
B = Int(カラー定数 / 256 / 256)
'B2~E2セルに取得したカラー定数とRGBの数値を入力する
Range("B2") = カラー定数
Range("C2") = R
Range("D2") = G
Range("E2") = B
End Sub
A2セルに赤文字を入力して実行すると、カラー定数は「255」で、R:255 G:0 B:0 となります。

A2セルに緑文字を入力して実行すると、カラー定数は「3057486」で、R:78 G:167 B:46 となります。

つまり、もし文字色を変えたい場合は、
「Range("文字色を変えたいセル").Font.Color = 255」で赤文字に、
「Range("文字色を変えたいセル").Font.Color = 3057486」で緑文字に設定できます。
背景色の取得
背景色も文字色と同様にまずカラーインデックスの番号を取得する方法について説明します。
背景色のカラーインデックスは「範囲.Interior.ColorIndex」で取得できるので、
文字色のコードの「Font」を「Interior」に書き換えるだけで背景色を取得することができます。
したがって、A1セルの背景色のカラーインデックス番号をB1セルに入力する場合は下記のコードになります。
Sub 背景色の取得1()
Dim 背景色 As Long
'A1セルの背景のカラーインデックス番号を取得する
背景色 = Range("A1").Interior.ColorIndex
'B1セルに取得したカラーインデックス番号を入力する
Range("B1") = 背景色
End Sub
A1セルを黄背景に設定して実行すると「6」が返ってきました。

こちらも文字色と同じで、背景色を変えたい場合は、
「Range("背景色を変えたいセル").Interior.ColorIndex = 6」で黄背景にすることができます。
RGBの取得方法も同様に、文字色を取得するコードの「Font」を「Interior」に書き換えれば、
背景色をRGBで取得することができます。
さいごに
カラーインデックスは非常にわかりやすく便利なのですが、使用できる色が限られており、またExcelの設定によって色が変わってしまうため、使用する際にはExcelのカラーインデックス設定の確認が必要になります。
逆に言うと、カラーインデックスを後から変更することで、VBAを書き換えずに一括で色を変更することもできる機能です!
RGBでの色設定は汎用性が高く、約1677万色使用できるため微細な色変化まで設定でき、Excelの設定に左右されずに固定の色を再現することができます。
しかし、あまり使う色数を増やしてしまうと使用者が判別しにくくなるデメリットもあるので要注意です!
いずれも色を取得することができるコードではありますが、ぜひ用途に合わせて最適な方法を選択してください♪
次回は取得した文字色や背景色を使った分岐や色名の判定などをご紹介したいと思います🌸🌸🌸