色の指定方法が変更になった
Office2007以降、セルの色を変更する方法が変わった
VBAでセルの色を変えたいとき、Office 2003以前ではColorIndexプロパティを使った指定方法が一般的でした。
例)Range("A1").Interior.ColorIndex = 6
2003までのOfficeは56色しか扱えず、色を1~56の番号で表していました。上の例で6は黄色です。
今でもColorIndexプロパティは有効ですが、2007以上のOfficeでは次のようにColorプロパティとRGB関数を使った方法をオススメします。
例)Range("A1").Interior.Color = RGB(255, 255, 0)
RGBは、Red Green Blueの頭文字を取ったもので、それぞれの強さを0~255で表します。どうやって好きな色のRGB値を取得するかは、下の動画を見てください。
ここではRGBの原理等は説明しませんので、詳細に興味があれば他のサイトなどで調べてください。
マクロの記録で出力される色のコード
Office 2007以降のバージョンで、たとえばマクロの記録をONにしてセルの背景を紫にすると、次のようなコードが出力されます。
With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 10498160 .TintAndShade = 0 .PatternTintAndShade = 0 End With
解説の前に余分なコードを削って、Withも外しておきます。
Selection.Interior.Color = 10498160
この10498160というのは、RGB値(赤・青・緑の割合)を数字で表したものです。実際に検証してみましょう。
まずExcelシートのセルに以下の関数を入力すると、6桁の16進数に変換されます。
=DEC2HEX(10498160, 6)
結果はA03070となり、2ケタ区切りで青=A0、緑=30、赤=70を表します。これを赤緑青の順に並び替えて、それぞれ10進数に戻すと、112,48,160となります。たとえばA0を10進数に戻すには、セルに以下のように入力します。
=HEX2DEC(A0)
実際にコードを書き換えて見ましょう
Selection.Interior.Color = RGB(112, 48, 160)
これを実行すると、最初のコードと同じ色になることが分かります。
マクロの記録で出てきたコードをそのまま使っても動きますが、コードの可読性を考慮するとRGB関数を使って指定したほうが良いと思います。
組み込み定数で色を指定する
VBAでは以下の定数が定義されており、Colorプロパティに代入することができます。定数で定義されているものはRGBよりもそちらを使うとコードが読みやすくなります。
- vbBlack
- vbBlue
- vbCyan
- vbGreen
- vbMagenta
- vbRed
- vbWhite
- vbYellow
Selection.Interior.Color = vbYellow