ColorプロパティとColorIndexプロパティの違い
VBAでセルの文字に色を付ける場合、ColorプロパティやColorIndexプロパティを利用します。
色の扱いはExcel2007から随分変わりました。ColorIndexプロパティでは後述のいくつかの問題がありますので、ここではColorプロパティでのサンプルコードを紹介します。
ColorプロパティとColorIndexプロパティの主な違いは以下の通りです。
相違点 | ColorIndexプロパティ | Colorプロパティ |
---|---|---|
使える色の数 | 56色 | 16,777,216色 |
プロパティへの設定値 | 1~56 | RGB関数の値、または、&HFFFFFF形式の16進数値 |
制限事項 | 設定値はカラーパレットと連動する | なし |
Colorプロパティはヘルプで「1600万色」と書いてありますが、厳密には上記の16,777,216色(赤256色×緑256色×青256色)です。ヘルプ抜粋です。
ブックで使える色数の上限は64000色
ColorプロパティとColorIndexプロパティでは使える色数にはかなりの差があります。
Colorプロパティでは1600万色を指定することができるため写真のような表現も可能ですが、1つのブックで扱えるセルの書式設定のパターン数の上限は64000個のため、1600万色全てをブック内で同時に使うことは出来ません。
シートを複数に分けていても1つのシートで書式設定の上限に達している場合は他のシートで書式設定を増やすことは出来ません。
ColorIndexプロパティの問題点
ColorIndexプロパティを使う場合、以下の2つの問題点があります。
使える色の数が少ない
前述の通り、ColorIndexプロパティは56色しか使えません。それ以上の設定をしたい場合に対応できません。
想定外の色が設定される恐れがある
こちらが致命的な問題ですが、マクロを実行するPCごとに設定される色が変わってしまう恐れがあります。ColorIndexプロパティには1~56を設定しますが、その値はカラーパレットに連動しています。
カラーパレットは標準の状態では以下の配色になっています。(Excelのオプション→保存→色ボタン)
変更ボタンを押すと配色を変更することが出来ます。そのため、ColorIndex = 3 として赤色を設定するつもりでも、PCによっては違う色になることがありえます。
自分だけが使うマクロであればいいですが、他の人も使うマクロの場合はこのような問題があることを認識しておく必要があります。
この問題のため、サンプルコードではColorプロパティを利用しています。
サンプルコード
セルの文字の色を変更するサンプルコードです。
セルの文字色変更関数
引数1:変更するセルを指定するRangeオブジェクト
引数2:変更後の文字色(RGB関数で指定)
1 2 3 |
Sub CellCharColorChange(r As Range, iColor As Long) r.Font.Color = iColor End Sub |
上記関数を呼び出し
1 2 3 4 5 6 7 |
Sub CellCharColorChangeTest() Call CellCharColorChange(Cells(1, 2), RGB(30, 200, 30)) Call CellCharColorChange(Range("B2"), RGB(255, 0, 0)) Call CellCharColorChange(Range("B3:B5"), RGB(0, 128, 255)) Call CellCharColorChange([B7], RGB(150, 0, 200)) Call CellCharColorChange(Range("B6,B8"), &H5AFF) End Sub |
呼び出しの際の第1引数は、上記のようにRangeオブジェクトを表す書き方であればどの書き方でも問題ありません。
呼び出し処理が5行(2~6行目)ありますが、第一引数は書き方を分けています。6行目のみ第二引数を16進数表記しています。
補足ですが、RGB関数の表記は名前の通り赤、緑、青の順で、16進数表記は青、緑、赤の順になり、赤と青がRGB関数と16進数では逆になります。
事前に入力した状態で実行すると以下のようになります。