セルやフォントに着色する際、手っ取り早く「色定数(ColorConstants)」で指定する方法がある。
例えばセルを赤で塗りつぶしたい場合、本来なら
Selection.Interior.Color = 255
となるところ、Excelが準備してくれている定数を用いることで、このような記述が可能になる。
Selection.Interior.Color = vbRed
vbRed=255と予め設定されているため、コードを読んでいても「赤色だね」と直感的に理解することが出来て大変便利だ。
他にXlRgbColorというものもあって、こちらは更に多くの色が準備されている。
今回は簡単のため、種類の少ない色定数で話をする。
まず、メンバーと値と色の関係は下表のとおり。
メンバー | 値 | 色 |
---|---|---|
vbBlack | 0 | |
vbBlue | 16711680 | |
vbCyan | 16776960 | |
vbGreen | 65280 | |
vbMagenta | 16711935 | |
vbRed | 255 | |
vbWhite | 16777215 | |
vbYellow | 65535 |
このままの値だと分かりにくいので、赤と緑と青の成分に分けて表示してみる。
なお、計算式は、過去に扱ったものを引っ張り出して使ってみた。
infoment.hatenablog.com
Enum myColorIndex ciR = 1 ciG ciB End Enum Function GetRGBInfo(target_range As Range, color_index As myColorIndex) As Long Dim tempColor(myColorIndex.ciR To myColorIndex.ciB) Dim myColor As Long myColor = target_range.Interior.Color tempColor(ciR) = myColor Mod 256 tempColor(ciG) = ((myColor - tempColor(ciR)) / 256) Mod 256 tempColor(ciB) = (myColor - tempColor(ciR) - 256 * tempColor(ciG)) / 256 ^ 2 GetRGBInfo = tempColor(color_index) End Function
これを用いて求めた結果が ↓ こちら。
メンバー | 値 | 色 | R | G | B |
---|---|---|---|---|---|
vbBlack | 0 | 0 | 0 | 0 | |
vbBlue | 16711680 | 0 | 0 | 255 | |
vbCyan | 16776960 | 0 | 255 | 255 | |
vbGreen | 65280 | 0 | 255 | 0 | |
vbMagenta | 16711935 | 255 | 0 | 255 | |
vbRed | 255 | 255 | 0 | 0 | |
vbWhite | 16777215 | 255 | 255 | 255 | |
vbYellow | 65535 | 255 | 255 | 0 |
ここで面白い(と思った)のが、各色定数は数値なのだから、足し算が可能ということ。例えば、このように「青+黄」という記述が可能だ。
Sub test() Selection.Interior.Color = vbBlue + vbYellow End Sub
これが絵具なら、青に黄を混ぜれば緑色になる。しかし先ほどの表にあるように、青と黄を足せば R=G=B=255 となって、vbWhite つまり白色になってしまう。光の三原色なのだから、当たり前と言えば当たり前なのだが、絵具感覚で色の足し算をすると全く違う色になってしまうので注意が必要だ。
ところで、つい最近までこれを(絵具のようになると)勘違いしていたのは誰?
はい、それは私です。
参考まで。