2009年06月13日

色の問題

現在でも、書籍でExcelの操作などを解説する際には、やはり2007と2003以前の両方に配慮しなければならない場合が少なくありません。
一般的な操作の解説に比べて、VBAの解説の場合はそれほど違いを意識しないで済むケースも多いのですが、そんな中でも面倒なのが、塗りつぶしや線、文字などの“色”の指定方法です。

セルの書式の色を表すプロパティは、単純に言ってしまうと、Color、ColorIndex、ThemeColorの3つです。

このうち、ColorIndexプロパティは、色そのものを指定するのではなく、登録された色に割り当てられた番号を指定するもの。
色の割り当ては、初期状態ではどのExcelでも同じですが、ブックごとにユーザーが色の設定を変更できるため、どんな環境でも常に同じ色が再現されるという保証はありません。

Excel 2007でもColorIndexプロパティは使用できますが、後述する「テーマ」の採用に伴って、従来のようなカラーパレットが表示されなくなったため、ワークシート上の操作で同じ色を選択するのが、逆に難しくなっています。

一方、ThemeColorプロパティはExcel 2007で追加されたもので、テーマの色を表します。
テーマというのは、いわば色(やその他の書式)の組み合わせを登録したもので、その中の特定の色を、インデックスで指定します。
やはりExcel 2007で追加されたTintAndShadeプロパティで明度を変えれば、さらに色のバリエーションを広げることもできます。
ブックのテーマを変更すると、そのインデックスが表している色も変わります。
そういう意味では、ColorIndexに近いといえます。

ColorIndexは2007では使いづらく、ThemeColorは2003以前では使えない……ということで、そのどちらでも問題なさそうなコードを紹介しようとすると、必然的にColorプロパティを使用することが多くなります。

Colorプロパティは、RGB値による色そのものの指定なので、環境によって変わるということはありません。
RGB値というのは、R(赤)、G(緑)、B(青)の光の三原色をそれぞれ0〜255の値で表したものですが、Colorプロパティなどで使用する際には、3つの値ではなく、それらを組み合わせた1つの数値で指定します(この変換にはRGB関数が利用できます)。
これでフルカラー(16777216色)が利用できるわけですが、Excel 2003以前では1つのブックで使用できる色は56色だけなので、登録されている中でそれに近い色が使用されます。

ただ、Colorプロパティを数値で指定するのは、設定値と実際の色との対応がわかりづらいですよね。
VBAにもともと用意されている、vbRedとかvbWhiteとかいったColorConstantsクラスの定数も使用できますが、これで指定できるのは基本の8色のみ。

で、やはりExcel 2007からなのですが、XlRgbColorというクラスの定数が追加されていることに、つい最近気がつきました。
rgbAliceBlueとかrgbAntiqueWhiteとかrgbAquaとか、「rgb」(「xl」ではなく)で始まる定数が全部で144個。
これは結構便利かも……と思ったものの、やはり2003以前では使えないんでしたね。(^^;)
posted by 土屋和人 at 10:13| Comment(0) | TrackBack(0) | Excel
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/29778161
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック