セルの背景色を赤色で塗りつぶすときは、次のようなコードを実行します。
Sub Sample1() ActiveCell.Interior.ColorIndex = 3 End Sub
このColorIndexプロパティは、いわゆるExcelの色パレットを表しています。3というのは、色パレットのの3番目であり、標準の色パレットでは、3番に赤が登録されています。だから、3を設定すると赤くなるわけです。
色パレットは、ユーザーが独自の色を登録することができますし、変更した色パレットはブックに保存できます。ですから、ColorIndexの3を青にすることも可能なわけです。
色パレットに登録されている色は、WorkbookオブジェクトのColorsプロパティで取得できます。色パレットには56色の色を登録できますので、それぞれがColors(1)~Colors(56)に該当します。
Sub Sample2() Dim i As Long For i = 1 To 56 Cells(i, 1) = ActiveWorkbook.Colors(i) Next i End Sub
また、Colorsプロパティのインデックス値を省略すると、56色分の配列を返します。
Sub Sample3() Dim C As Variant C = ActiveWorkbook.Colors MsgBox C(3) End Sub
Colorsプロパティが返すのは、RGB関数によって計算される、色を表す数値です。RGB関数は、赤(R)・緑(G)・青(B)に、それぞれ0から255までの数値を指定できます。RGBについて詳しいことを知りたい方はググってください。
Sub Sample4() MsgBox RGB(255, 0, 128) End Sub
Colorsプロパティが返す数値を、RGBに分解してみましょう。まず、RGB関数が行う計算から解説します。なお、ここでは
RGB(128,52,204) = 13382784
を例にします。RGBに指定した数値は適当です。RGB関数は、次の計算を行います。
(R * 1) + (G * 256) + (B * 256 * 256)
上記の例では
(128 * 1) + (52 * 256) + (204 * 256 * 256) = 128 + 13312 + 13369344 = 13382784
となります。したがって、数値をRGBに分解するには次のようになります。
Sub Sample5() Dim R As Long, G As Long, B As Long, N As Long N = ActiveWorkbook.Colors(18) B = Int(N / 65536) G = Int((N - (B * 65536)) / 256) R = N - (G * 256) - (B * 65536) MsgBox N & vbCrLf & _ "R:" & R & vbCrLf & _ "G:" & G & vbCrLf & _ "B:" & B End Sub