« 種々のカラーパレット 5 | トップページ | 色を反転する »

2010年2月24日 (水)

RGB関数を使ってセルの塗りつぶしの色を指定したとき実際に表示される色

記事「Excelで表 示できる色はいったい何色?」の中でとりあえず、
個人的にExcelで表示できる色は46色ってことにしましたが
(上記記事内プロシージャ「Macro100107c」を実行すると
46色だったり、52色だったりしますが…)
どうも、セルの塗りつぶしに使える色の数は
それに近いようです。

このことに関して
マイクロソフトサポートオンライン内で次の頁がありました。
「XL2000: RGB 関数が予期しない色に マップします。」

この頁で書かれているのはShapeRangeオブジェクトのことですが、
….Interior.Color = RGB(x,y,z)
の流れからすると、

Cell(i, j).Interior.Color = RGB(x,y,z)

でも同じことが起きそうです。

それで何が起きるかというと
Colorプロパティは、RGBの3つの引数を受け取ると
最も近いColor Indexにマップするらしいです。

マップってどのような日本語にすればいいかわからないけど
要するに、RGB関数で色を指定しても
その時のカラーパレットの中で一番近い色にされてしまうようです。

ということは、
セルの塗りつぶしは
RGB関数で色を指定するのはあまり意味がなく、
ColorIndexで指定した方がいいのかなと思います。

ここでまたExcelのセルの塗りつぶしに使える色の数について考えます。

RGB関数でどんな値を指定しても
必ずカラーパレットの中の近い色になってしまうなら
結局、カラーパレットの色の数の56色が
Excelのセルの塗りつぶしに使える色の数になります。

実は、「Excelで表示できる色」から
「Excelのセルの塗りつぶしに使える色」に表現を変えました。

というのは、この頁にShapeRangeオブジェクトで、
255x255x255色使える色の指定の仕方が書いてあったからです。

以下のコードでColorIndexにマップされた色と
マップされてない色を見てみます。

マップされた色・されてない色をみるコード:

Sub macro100224a()
'ColorIndexにマップされた色とされない色
'セルA2の塗りつぶしの色がマップされた色
'四角の色がマップされていない色
'Stopがあるので、「F5」キーで適当に実行
    Dim r, g, b As Integer
    Sheets.Add
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, 3, 30, 50, 50) _
        .Name = "Color1"
    Cells(1, 1).ColumnWidth = 14
    For r = 0 To 255
        For g = 0 To 255
            For b = 0 To 255
                Cells(1, 1) = "RGB(" & r & ", " & g & ", " & b & ") ="
                Cells(1, 2) = RGB(r, g, b)
                'セルの塗りつぶしの色設定
                Cells(2, 1).Interior.Color = RGB(r, g, b)
                Cells(2, 2) = Cells(2, 1).Interior.Color
                'シェイプの色設定
                ActiveSheet.Shapes("Color1").Select
                Selection.ShapeRange.Fill.ForeColor.RGB = RGB(r, g, b)
                Cells(3, 2) = Selection.ShapeRange.Fill.ForeColor.RGB
                Calculate
                Stop
            Next b
        Next g
    Next r
End Sub

実行中の様子
Vba20100224a

セルA1が今のRGBの状態、
その横のセルB1がそのRGB関数を長整数型で表したもの。

セルA2の塗りつぶしをRGB関数で設定して
マップされた色を見る。
その横セルB2がそのセルから取得した色の長整数型。

セルB3が四角のシェイプから取得した色の長整数型。

|

« 種々のカラーパレット 5 | トップページ | 色を反転する »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: RGB関数を使ってセルの塗りつぶしの色を指定したとき実際に表示される色:

« 種々のカラーパレット 5 | トップページ | 色を反転する »