色パレットに登録されている色を調べる


セルの背景色を赤色で塗りつぶすときは、次のようなコードを実行します。

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に分解する

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に分解するには次のようになります。

  1. 元の数値(Nとする)を65536で割ります。65536ってのは256*256です
  2. Nを65536で割った商(整数部)がRGBのBになります
  3. Nから、上で求めたB×65536を引きます。それをN2とします
  4. N2を256で割った商(整数部)がRGBのGです
  5. N2から、上で求めたG×256を引きます。その結果がRGBのRです
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