日本語入力ソフトとVBAの覚え書き

・各種日本語入力ソフトの辞書解説 ・ちょっと楽になるExcel VBA集

Excel VBAの色の指定方法について ~組込定数, ColorIndex, SchemeColor, RGB指定, ThemeColor~

f:id:dz_dzone:20170814233145j:plain

2019.6.26 ThemeColorの内容を追加しました

様々な色の指定方法

Excel VBAでの色の指定方法には下記のようなものがあります。

指定方法 概要
組込定数(VBA) 定数で基本的な8色を指定できる
xlRgbColor列挙 定数で135色を指定できる
ColorIndex インデックスカラー値:0~56で指定。0は塗りつぶしなし
1~56はユーザー指定およびリセットが可能
SchemeColor スキームカラー値:1~80で指定
RGB指定 RGB関数:RGB(赤:Red, 緑:Green, 青:Blue)の各要素を10進数(0~255)または16進数(00~FF)で指定
ThemeColor 定数で12色を指定できる。各々の色に対し、プラス5個ずつの濃淡色を指定できる。配色テーマをあらかじめ設定しておくとテーマ変更で一括で配色を変えられるのが特徴だが、複数テーマの同時使用は出来ない

ここではまずそれぞれの指定方法について解説し、最後にColorIndex, SchemeColor, 組み込み定数, RGB指定の関係性を表で示します。

組込定数(VBA)

組込定数(VBA)は基本の8色を指定できます。
用途:主にフォントの色指定セルの枠や背景の色指定に使います。

With Range("B2")
  .Value = "TEST"
  .Font.Color = vbBlue        '**文字色=青
  .Borders.Color = vbMagenta  '**枠の色=マゼンタ
  .Interior.Color = vbYellow  '**背景色=黄色
End With

vbBlack   : 黒
vbWhite   : 白
vbRed     : 赤
vbGreen   : 緑
vbBlue    : 青
vbYellow  : 黄色
vbMagenta : マゼンタ
vbCyan    : シアン

xlRgbColor列挙 (Excel)

VBA言語自身の組込定数の他に、Excelにのみ設定されたxlRgbColor列挙として示される色の定数が142色ありますが、色かぶりがあるため、実際は135色です。
docs.microsoft.com

ColorIndex:インデックスカラー

ColorIndexは、1~56の56色と、0(塗り潰しなし)を指定できます。
用途:主にフォントセルの枠・背景Chartオブジェクト(グラフ)の色指定に使います。

With Range("B2")
  .Value = "TEST"
  .Font.ColorIndex = 5        '**文字色=青
  .Borders.ColorIndex = 7     '**枠の色=マゼンタ
  .Interior.ColorIndex = 24   '**背景色=薄い水色
  .Interior.ColorIndex = 0    '**背景色=塗りつぶしなし
  '**塗りつぶしなしは xlColorIndexNone / xlNone と指定してもよい
  .Interior.ColorIndex = xlColorIndexNone
  '**自動 (xlColorIndexAutomatic / xlAutomatic) : 様々な項目の自動値を指定できる
  '※全ての項目が該当するわけではないので注意
  .Font.Color = xlColorIndexAutomatic
End With

やや冗長になりますが、別の書き方も出来ます。

ActiveWorkbook.Colors(n) '※n= 1~56
' ※ Colors(0) はエラーになります

'// 下記の2つは同じ内容
Range("A1").Interior.ColorIndex = 24
Range("A1").Interior.Color = ActiveWorkbook.Colors(24)

ColorIndexは編集およびリセットが可能

また、1~56のColorIndexは独自に編集することも可能です。更に、編集した色をデフォルトにリセットすることも可能です。

'例:ColorIndex 1 の色を変更する (デフォルト値 0 = 黒 → 赤 RGB(255, 0, 0)へ )
ActiveWorkbook.Colors(1) = RGB(255, 0, 0)

Debug.Print "ColorIndex 1 の色:" & ActiveWorkbook.Colors(1)
ColorIndex 1 の色:255

'例:ColorIndexを全てデフォルトにリセットする
ActiveWorkbook.ResetColors

SchemeColor:スキームカラー

ShcemeColorは、1~80の80色を指定できますが、いくつかの値は同値です。
用途:主に、Shapeオブジェクトの枠や塗り潰しの色指定に使います。

'**オートシェイプ「円」を描画
With ActiveSheet.Shapes.AddShape(msoShapeOval, 50, 50, 75, 75)
  '**枠線の設定
  With .Line
    .Visible = msoTrue         '**表示する
    .Weight = 1.5              '**枠線の太さ
    .ForeColor.SchemeColor = 2 '**枠線の色を「2:赤」にする
    .Transparency = 0          '**透過しない
  End With
  
  '**塗りつぶしの設定
  With .Fill
    .Visible = msoTrue             '**表示する
    .Patterned msoPatternLargeGrid '**パターン「格子(大)」
    .ForeColor.SchemeColor = 4     '**前景色を「4:青」にする
    .BackColor.SchemeColor = 5     '**背景色を「5:黄色」にする
  End With
End With

f:id:dz_dzone:20190829170225j:plain

RGB指定 (RGB関数)

RGB指定はRGB関数(またはその計算値)により色指定するものです。光の三原色(赤Red, 緑Green, 青Blue)の組み合わせにより色が決まります。各色0~255段階の濃度指定が可能です。

Range("B2").Font.Color = RGB(0, 0, 255)

ShapeRange.Fill.ForeColor.RGB = RGB(255, 0, 0)

RGB関数とその計算値

RGB形式はRGB関数によってその値を示しており、実際にはRGB関数の計算値と同値です。

RGB関数 : RGB(r, g, b) = r * 256^0 + g * 256^1 + b * 256^ 2

例:
 RGB(0, 0, 0) = 0
 RGB(255, 255, 255) = 255 + 255 * 256 + 255 * 256^2
                    = 255 + 65280 + 16711680
                    = 16777215
よって、
Range("B2").Font.Color = RGB(255, 255, 255)
は、
Range("B2").Font.Color = 16777215
とも指定できる

計算値からR, G, Bの各要素を取り出す

先ほどと逆の計算を行うことで、画面上の色からRGB各要素の値を求められます。つまり、画面上のセルやオートシェイプなどの色から赤:Red, 緑:Green, 青:Blueの各要素の値を抽出することが可能です。

'**VBAによる計算式
myColor = ActiveCell.Interior.Color
R = myColor Mod 256
G = Int(myColor / 256) Mod 256
B = Int(myColor / 256 / 256)

'**ワークシート関数による計算式
A1セルに数値が入っているものとすると、
R : =MOD(A1,256)
G : =MOD(INT(A1/256),256)
B : =INT(B3/256/256)

RGB値を16進数で指定する

RGB値をWebカラー指定のような16進数で指定することも可能です。このとき、6桁の16進数の頭に「&H」を付加して下さい。

Range("B2").Font.Color = RGB(0, 0, 255)
Range("B2").Font.Color = &H0000FF

ThemeColor:テーマカラー

テーマカラーは、文字色や背景色の変更の際によく見かけるテーマの配色です。
f:id:dz_dzone:20190619110919j:plain
このテーマの配色は「ページレイアウト」タブの「テーマ」>「配色」から様々な決まった組合せの中から選ぶことが出来、テーマを変更することで一括で色を変更することが可能なものです。
f:id:dz_dzone:20190619111308j:plain
また、配色を自分でカスタマイズすることも可能です。
f:id:dz_dzone:20190619111616j:plain

Range("B2").Font.ThemeColor = xlThemeColorAccent1
Range("B2").Interior.ThemeColor = xlThemeColorAccent4

      定数                      値    色の名称
xlThemeColorDark1                1  濃色1(背景)
xlThemeColorLight1               2  淡色1(テキスト)
xlThemeColorDark2                3  濃色2(背景)
xlThemeColorLight2               4  淡色2(テキスト)
xlThemeColorAccent1              5  アクセント1
xlThemeColorAccent2              6  アクセント2
xlThemeColorAccent3              7  アクセント3
xlThemeColorAccent4              8  アクセント4
xlThemeColorAccent5              9  アクセント5
xlThemeColorAccent6             10  アクセント6
xlThemeColorHyperlink           11  ハイパーリンク
xlThemeColorFollowedHyperlink   12  表示済みのハイパーリンク

各指定形式の比較表 (ColorIndex, SchemeColor, 組込定数, RGB形式)

カラーバー ColorIndex SchemeColor 組込定数 RGB指定 16進指定
塗り潰し
なし
0 - - - -
  1 0 or 8 vbBlack RGB(0,0,0) &H000000
  2 1 or 9 vbWhite RGB(255,255,255) &HFFFFFF
  3 2 or 10 vbRed RGB(255,0,0) &HFF0000
  4 3 or 11 vbGreen RGB(0,255,0) &H00FF00
  5 4 or 12 vbBlue RGB(0,0,255) &H0000FF
  6 5 or 13 vbYellow RGB(255,255,0) &HFFFF00
  7 6 or 14 vbMagenta RGB(255,0,255) &HFF00FF
  8 7 or 15 vbCyan RGB(0,255,255) &H00FFFF
  9 16 - RGB(128,0,0) &H800000
  10 17 - RGB(0,128,0) &H008000
  11 18 - RGB(0,0,128) &H000080
  12 19 - RGB(128,128,0) &H808000
  13 20 - RGB(128,0,128) &H800080
  14 21 - RGB(0,128,128) &H008080
  15 22 - RGB(192,192,192) &HC0C0C0
  16 23 - RGB(128,128,128) &H808080
  17 24 - RGB(153,153,255) &H9999FF
  18 25 - RGB(153,51,102) &H993366
  19 26 - RGB(255,255,204) &HFFFFCC
  20 27 - RGB(204,255,255) &HCCFFFF
  21 28 - RGB(102,0,102) &H660066
  22 29 - RGB(255,128,128) &HFF8080
  23 30 - RGB(0,102,204) &H0066CC
  24 31 - RGB(204,204,255) &HCCCCFF
  25 32 - RGB(0,0,128) &H000080
  26 33 - RGB(255,0,255) &HFF00FF
  27 34 - RGB(255,255,0) &HFFFF00
  28 35 - RGB(0,255,255) &H00FFFF
  29 36 - RGB(128,0,128) &H800080
  30 37 - RGB(128,0,0) &H800000
  31 38 - RGB(0,128,128) &H008080
  32 39 - RGB(0,0,255) &H0000FF
  33 40 - RGB(0,204,255) &H00CCFF
  34 41 - RGB(204,255,255) &HCCFFFF
  35 42 - RGB(204,255,204) &HCCFFCC
  36 43 - RGB(255,255,153) &HFFFF99
  37 44 - RGB(153,204,255) &H99CCFF
  38 45 - RGB(255,153,204) &HFF99CC
  39 46 - RGB(204,153,255) &HCC99FF
  40 47 - RGB(255,204,153) &HFFCC99
  41 48 - RGB(51,102,255) &H3366FF
  42 49 - RGB(51,204,204) &H33CCCC
  43 50 - RGB(153,204,0) &H99CC00
  44 51 - RGB(255,204,0) &HFFCC00
  45 52 - RGB(255,153,0) &HFF9900
  46 53 - RGB(255,102,0) &HFF6600
  47 54 - RGB(102,102,153) &H666699
  48 55 - RGB(150,150,150) &H969696
  49 56 - RGB(0,51,102) &H003366
  50 57 - RGB(51,153,102) &H339966
  51 58 - RGB(0,51,0) &H003300
  52 59 - RGB(51,51,0) &H333300
  53 60 - RGB(153,51,0) &H993300
  54 61 - RGB(153,51,102) &H993366
  55 62 - RGB(51,51,153) &H333399
  56 63 - RGB(51,51,51) &H333333
カラーバー ColorIndex SchemeColor 組込定数 RGB指定 16進指定
  - 64 - RGB(0,0,0) &H000000
  - 65 - RGB(255,255,255) &HFFFFFF
  - 66 - RGB(100,100,100) &H646464
  - 67 - RGB(240,240,240) &HF0F0F0
  - 68 - RGB(0,0,0) &H000000
  - 69 - RGB(255,255,255) &HFFFFFF
  - 70 - RGB(160,160,160) &HA0A0A0
  - 71 - RGB(0,120,215) &H0078D7
  - 72 - RGB(0,0,0) &H000000
  - 73 - RGB(200,200,200) &HC8C8C8
  - 74 - RGB(55,55,55) &H373737
  - 75 - RGB(255,255,255) &HFFFFFF
  - 76 - RGB(100,100,100) &H646464
  - 77 - RGB(0,0,0) &H000000
  - 78 - RGB(255,255,255) &HFFFFFF
  - 79 - RGB(0,0,0) &H000000
  - 80 - RGB(255,255,225) &HFFFFFF