You.Activate

色の指定方法が変更になった

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値を取得する動画

ここでは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)

コードをRGB関数に変換

実際にコードを書き換えて見ましょう

    Selection.Interior.Color = RGB(112, 48, 160)

これを実行すると、最初のコードと同じ色になることが分かります。

マクロの記録で出てきたコードをそのまま使っても動きますが、コードの可読性を考慮するとRGB関数を使って指定したほうが良いと思います。

組み込み定数で色を指定する

VBAでは以下の定数が定義されており、Colorプロパティに代入することができます。定数で定義されているものはRGBよりもそちらを使うとコードが読みやすくなります。

    Selection.Interior.Color = vbYellow