Excelは、あらかじめ色を定義した「色パレット」を持っています。
それぞれの色には、その位置によって、次の番号が割り当てられています。
標準では、赤は3、緑が4、青が5です。ColorIndexプロパティは、この色番号(色パレットの位置)を指定するプロパティです。
あまり知られていませんが、この色パレットは、ユーザーが自由に定義することができます。下図は、青と赤を入れ替えたところです。
こうすると、それまで赤だった色パレットの3番は青になりますので、ColorIndexプロパティに3を設定すると、青色になります。
Sub Sample1() Range("B2").Font.ColorIndex = 3 End Sub
もちろん、この状態で色パレットを変更すると、セル内の色も変更されます。ColorIndexプロパティは色パレットの位置を指定するプロパティなので、その場所に何色が定義されているかによって、適用される色が異なります。
色パレットに登録されている色を調べるには、Colorsプロパティを使います。詳しくは下記ページをご覧ください。
色パレットはExcel 2007以降にも実装されていますので、従来と同じように、ColorIndexを使って色を設定することも可能です。
上の色パレットを見て分かるように、ColorIndexプロパティで指定できる色は56色です。実は、Excel 2003までは、ワークシート上で56色しか表現できませんでした。これは、ヘルプにも明記されています。
【Excel 2003のヘルプ】
Excel 2007では、ブックで使用できる色が1,600万色に拡張されました。
【Excel 2007のヘルプ】
使用できる色数は拡張されたのですが、ColorIndexプロパティで使う色パレットに登録できる色数は56色のままです。せっかく、多くの色を表示できるようにしても、ColorIndexプロパティで色を設定する限り、従来と変わらず、ワークシート上では56色しか表現できません。
Excel 2007以降のグラフでも、従来のCoilorIndexを使用できます。次のコードは、1つめの系列を赤で塗りつぶします。
Sub Sample1() ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Interior.ColorIndex = 3 End Sub
Excel 2007以降のグラフでも、以前と同じ色パレット(ColorIndex)を使用できるのですが、少しだけ注意が必要です。
Excel 2003までは、色といえば、色パレットしかありませんでした。本当はExcel 2003でも、Colorプロパティがあり、GRB関数を使って中間色を指定することが可能でした。可能でしたが、中間色を指定したところで、しょせん表示されるのは、色パレットに登録されている56色だけです。Colorプロパティに指定した中間色は、色パレットに登録されている色のうち、最も近いとExcelが判断した色に、自動的に置き換えられてしまいました。
使用できる色種が、色パレットだけだったので、マクロから設定しても、手動操作で設定しても、もちろん結果は同じになります。では、Excel 2007ではどうでしょう。まず、下図グラフの系列1を「青」で塗りつぶしてみます。色パレットで「青」は5です。
Sub Sample2() ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).Interior.ColorIndex = 5 End Sub
結果はご覧の通り。
では次に、2番目の系列を手動操作で「青」に塗りつぶしてみます。
明らかに違いますよね。ちなみに、マクロでColorIndexに5を設定した系列1は、RGB値では RGB(0, 0, 255) となり、手動操作でリボンのボタンから青色を設定した系列2は、RGB(0, 112, 192) となっています。なお、色をRGB値に分解する方法は、下記のページをご覧ください。
色パレットに登録されている色を調べる上図のように、文字色や塗りつぶし色を設定するボタンをクリックすると「テーマの色」と「標準の色」が選択できます。「テーマの色」は、ブックのテーマを変更すると変わります。
対して「標準の色」は、テーマに依存しない"固定された色"と考えられます。いわば、Excel 2003までの色パレットでしょう。ところが、この「標準の色」と色パレットは、異なる「青」が設定されています。いえ「青」だけではありません。ちょっと調べてみましょう。
まず「標準の色」でセルを塗りつぶします。
それぞれの色について、RGB値を調べてみます。
各色が、色パレットでは何番の色に該当するか、ColorIndexを調べます。
色パレットに登録されていない色は、色パレットの中で最も近い色と認識されます。
いま調べた色番号を使って、色パレットに登録されている色で塗りつぶしてみます。
色パレットで塗りつぶした色のRGB値を調べます。
このRGB値が「標準の色」で塗りつぶしたRGB値と一致すれば、両者は同じ色ということになります。
太字は、一致していないRGB値です。比較しやすいように、塗りつぶしたセルを隣り合わせにしてみましょうか。
Excel 2007の「標準の色」のうち、Excel 2003までの色パレットと同じ色が登録されているのは「赤」と「黄」だけです。
Excel 2007からは、コメントを除いて、手動操作では従来の色パレットを簡単には使用できなくなりました。ですから、Excel 2007以降に新規作成したブックでは、手動で「標準の色」を操作する限り、赤は赤、青は青と同じ色になります。しかし、Excel 2003以前から使用しているブックでは、それまでに色パレットで設定した色と、Excel 2007の「標準の色」で設定した色は微妙に異なる場合があります。さらに、ColorIndexを操作するようなマクロでは、マクロで設定した色と、手動操作の「標準の色」も異なる場合があるということです。面倒くさいですね~。