その5 2006.11 ExcelのColorIndex

【カラーパレットと色番号の並びはバラバラ】

Excelでセルの値によって背景を4つの色に塗ることになりました。

3色までなら「書式」-「条件付き書式」を使えば簡単にできます。
例えば、「灰色に塗る」という文字がセルに入力されたら以下の条件付き書式では背景を灰色に塗ります。

という場合は

となります。

しかし、条件付き書式は条件が3つまでしか設定できません。そのため、この方法では3色以上は塗れないことになります。

そこでVBAのInterior.ColorIndexを使って色を塗り替えます。

If ActiveCell.Value = "灰色に塗る" Then Selection.Interior.ColorIndex = 15

上記の例は、現在のセル(ActiveCell)の値(Value)が「灰色に塗る」という文字列ならば背景を色番号15(ColorIndex = 15)で塗りつぶします。
Index番号を使う場合は「.ColorIndex = 15」とします。

RGB値を使う場合は「.Interior.Color = RGB(0, 255, 255)」のように指定します。
Colorの後にIndexがない形となります。

Index番号(ColorIndex)はExcelパレット色の右や左から順番に番号付けされていません。 しかも、パレットを独自色に変更している場合は標準では灰色である15番が、かならずしも灰色とは限らなくなります。

ExcelパレットとIndex番号は下記のように対応しています。

Interior.Patternで網掛けなどのパターン指定もできます。
通常はsolid(ベタ塗り)になっています。

PatternColor でパターンの色も変更できます。
例えば、標準パレットの状態であれば薄青色の右下がり斜線縞は
Interior.Pattern = xlPatternLightDown
PatternColor = 37
とか。

パターン名は下記のようになっています。

 xlPatternAutomatic 自動
 xlPatternNone パターン・塗りつぶし無し

1 xlPatternSolid 塗りつぶし
2 xlPatternGray75 75%灰色
3 xlPatternGray50 50%灰色
4 xlPatternGray25 25%灰色
5 xlPatternGray16 12.5%灰色
6 xlPatternGray8 6.25%灰色
7 xlPatternHorizontal 横縞
8 xlPatternVertical 縦縞
9 xlPatternDown 右下がり縦線縞
10 xlPatternUp 左下がり縦線縞
11 xlPatternChecker 左下がり斜線格子
12 xlPatternSemiGray75 極太線左下がり斜線格子
13 xlPatternLightHorizontal 実線横縞
14 xlPatternLightVertical 実線縦縞
15 xlPatternLightDown 実線右下がり斜線縞
16 xlPatternLightUp 実線左下がり斜線縞
17 xlPatternGrid 実線横格子
18 xlPatternCrissCross 実線左下がり斜線格子

下記はwikipediaのVBA記事に掲載されていたサンプルを参考に一部アレンジした例です。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim myCell As Range
For Each myCell In Range("B2:B19")
Select Case myCell.Value
Case Is ‹= 5
myCell.Interior.ColorIndex = 52
Case 6 To 10
myCell.Interior.ColorIndex = 3
Case 11 To 15
myCell.Interior.ColorIndex = 7
Case Is › 15
myCell.Interior.ColorIndex = 4
End Select
Next myCell
End Sub


上記のVBAをExcelに記述すると、B2からB19の範囲のセルに5以下の数字が入力されるとColorIndexの52番で塗りつぶされます。 6から10の場合は3番で、11から15の場合は・・・という具合で塗り分けられます。 下記の図ではカラーパレットを変更しているので色が標準のものと異なっています。 このような具合に塗り分けられるという一例です。

文字の色を変える場合は
If ActiveCell.Value = "灰色に塗る" Then Selection.Font.Pattern = 3
とすると文字の色は赤になります。
色の指定はRGB値でも可能です。

VBAでの指定は色数の制限が無いことや、背景色や網掛けなど様々な色指定が可能なので便利です。