DuKiccoの雑記

My Life Is Myself

【HTMLカラーコードをエクセルで使う】【エクセル,VBA,16進法,RGB】

エクセルでグラフを作成する際など、デフォルトの配色ではいまいちなことが多いです。きれいな色を探す際に他の配色サイトを参考にすることがありますが、そこではHTMLカラーコード(HEX)で記載されているケースが多く、エクセルではそのままでは利用できません。あまり詳しく書かれているサイトがないので、以下に HTMLカラーコードをエクセルで使用するまでをまとめます。

配色サイト例

www.webdesignrankings.com

 

coolors.co
coolors.co

 

まずは基本知識としてカラーコードとRGBについて理解しましょう。

カラーコードとは、Webページ上で表現される色を指定するための制御コードのことである。

カラーコードはシャープ(#)に続く6桁の16進数で表記される。2桁ごとに赤・青・緑の濃淡が表され、16進数(0~F)の0が最も薄く、Fに近づくほど濃い色となる。例えば白は「#FFFFFF」、黒は「#000000」、オリーブ色は「#808000」である。

woma2.com

 
以降エクセル内でのお話に移ります。

エクセルでセルの色を取得すると例えば「5177573」といった整数値が返ってきます。これは何かといいますと16進法の6文字の文字列が数値に変換されたものになります。注意が必要な点としては先のサイトにありましたように一般的には16進法表記ではRGBの順になるのですが、VBAでは仕様上「BGR」逆の順番になっていることです。

 
ですので元のカラーコードが「0123ef」だったとするとエクセルでは二文字単位で順番を逆さにして「ef2301」と入れ替える必要があります。VBA中ではこの文字列に16進法文字列を意味する&Hを足して、これをcLngで数値型に変換し、カラープロパティ値として指定してあげればよいのです。

 
例えばRange("A1")を赤「カラーコード→#FF0000 」く塗るコードは以下の通りです。

Range("A1").Interior.Color = CLng("&H0000FF")

以下にカラーコードからカラープロパティ値を取得する関数と使用例を示します。

GetColor はRGB→BGRに入れ替え16進法文字列から整数値に変換していますが、他の方法としてGetColor 2のように、二文字ずつとりだして、数値に変換して(例FF→256。これもVBA中ではclng("&HFF")みたいなかんじでいけます。)、RGB関数に代入する方法もあります。テストコードで出てくるメッセージは両方の関数で変換された数値になりますが同じ数字が出てくることを確認できると思います。

Function GetColor(tst As String) As Long
'カラーコードから対応するカラープロパティ値を出力
'tst→#が取り除かれたカラーコード6文字

GetColor = CLng("&H" & Mid(tst, 5, 2) & Mid(tst, 3, 2) & Mid(tst, 1, 2))

End Function
Function GetColor2(tst As String) As Long
'カラーコードから対応するカラープロパティ値を出力
'tst→#が取り除かれたカラーコード6文字

GetColor2 = Rng(CLng("&H" & Mid(tst, 1, 2)), CLng("&H" & Mid(tst, 3, 2)), CLng("&H" & Mid(tst, 5, 2)))

End Function
Sub test()
'Range("A1:B1")を赤(FF0000)に、Range("A2:B2")を黄色(FFFF00)に塗る。
    Range("A1").Interior.Color = GetColor("FF0000")
    MsgBox GetColor("FF0000")
    Range("A2").Interior.Color = GetColor("FFFF00")
    Range("B1").Interior.Color = GetColor("FF0000")
    MsgBox GetColor("FF0000")
    Range("B2").Interior.Color = GetColor("FFFF00")
End Sub