Sample Site

色の設定・取得

文字や背景の色の設定には様々な方法があります。 ここでは、カラーインデックス、RGB値、10進法、16進法、の4つの方法での 色の取得や設定を紹介します。
アップデート(2020年2月あたり?)で、Excelでの色の取扱いのインターフェースが改良されています。 色の設定のダイアログに、HEX値の項目が追加になっています。 直接Excelの色設定ダイアログで、操作する場合に使い勝手が良くなりました。

●色の表現
vbaで扱える色の表現には以下のものがあります

ColorIndexとColorプロパティ
[ColorIndexプロパティ]

ColorIndex プロパティでは、カラー パレットのインデックス番号で色を指定します
このColorIndex での表現はexcel2003までの古い表現、設定方法ですが少ない整数のみで色が 表現できるので、色数は少ないですが手軽さで今でもよく利用されます。
(カラー パレットのインデックス番号:1~56の整数値)

https://docs.microsoft.com/ja-jp/office/vba/api/excel.colorindex

(構文)
expression.ColorIndex

記述例設定対象データ型
Cells(5,5).font.ColorIndex = 1 (フォントの色)カラーインデックス
Cells(5,5).Interior.ColorIndex = 3 (セルの背景色)カラーインデックス
Cells(5,5).Borders.ColorIndex = 5 (セルの枠色)カラーインデックス

[Colorプロパティ]

基本的にはRGB関数を使用して色の値を作成します。
さらに10進法、16進法での設定、取得も出来ます。
色数はおよそ1,600万色となります(256×256×256=16,777,216)

https://docs.microsoft.com/ja-jp/office/vba/api/excel.font.color

(構文)
expression.Color

【色の設定】
記述例設定対象データ型
Cells(5,5).Font.Color = RGB(0,0,0) (フォントの色)RGB値
Cells(5,5).Interior.Color = RGB(255,0,0)(セルの背景色)RGB値
Cells(5,5).Borders.Color = RGB(0,0,255)(セルの枠色)RGB値
   
Cells(5,5).Font.Color = 0 (フォントの色)10進数
Cells(5,5).Interior.Color = 255(セルの背景色)10進数
Cells(5,5).Borders.Color = 16711680(セルの枠色)10進数
   
Cells(5,5).Font.Color = "&H000000"(フォントの色)16進数
Cells(5,5).Interior.Color = "&H0000FF"(セルの背景色)16進数
Cells(5,5).Borders.Color = "&HFF0000"(セルの枠色)16進数

【色の取得】
取得対象範囲は単一セル(記述:cells(x,y)またはrange("**"))
複数のセル範囲は取得出来ません。

記述例取得対象データ型
getcolor1:色を収容する変数(integer or long)  
getcolor1=Cells(5,5).Font.ColorIndex (フォントの色)カラーインデックス
getcolor1=Cells(5,5).Interior.ColorIndex(セルの背景色)カラーインデックス
getcolor1=Cells(5,5).Borders.ColorIndex(セルの枠色)カラーインデックス
   
getcolor2:色を収容する変数(long)  
getcolor2=Cells(5,5).Font.Color(フォントの色)10進数
getcolor2=Cells(5,5).Interior.Color(セルの背景色)10進数
getcolor2=Cells(5,5).Borders.Color(セルの枠色)10進数
   
getcolor3:色を収容する変数(long)  
getcolor3=Cells(5,5).Font.Color(フォントの色)16進数:Hex$(getcolor3)
getcolor3=Cells(5,5).Interior.Color(セルの背景色)16進数:Hex$(getcolor3)
getcolor3=Cells(5,5).Borders.Color(セルの枠色)16進数:Hex$(getcolor3)

RGB値への変換(関数の設定)
一旦、例えばlngColorと言う名前のlong型変数に色情報を収容したのち、下記に示すようなPrivate関数 により、RGB値に変換します。

関数の定義(Mod 演算子:result = number1 Mod number2 )
(number1 を number2 で割って (浮動小数点数は整数に四捨五入されます)、その余りのみを result として返します。)

Private Function Color_to_RGB(ByVal lngColor As Long) As RGBNumber
    With Color_to_RGB
      .Red = lngColor Mod 256
       .Green = Int(lngColor / 256) Mod 256
      .Blue = Int(lngColor / 256 / 256)
    End With
End Function

変数の定義
Dim lngColor As Long      '10進の色ナンバー
Dim typRBG As RGBNumber  'RGB数

RGB情報の取り出し(上記のColor_to_RGB関数でRGB値に変換して取り出す)
typRBG = Color_to_RGB(lngColor)  RGB数収容
Cells(14, 7) = Hex$(lngColor)  背景色(16進)の表示
Cells(15, 7) = typRBG.Red  RGB数(R)の表示
Cells(16, 7) = typRBG.Green  RGB数(R)の表示
Cells(17, 7) = typRBG.Blue  RGB数(R)の表示



色の設定・取得
動作1の画面動作2の画面
このサンプルは、ボタンを押すごとに対象エリアの文字、背景色が変わるごく簡単なサンプルです。 ここではRGB値の取得のため、変換用の関数を設定し、それを用いてRGB値を求めています。

RGB数の宣言


RGB値への変換関数の設定


色の設定・取得(メイン)


セル、フォント、外枠の色の設定・取得(ダウンロード)

カラーインデックス一覧表(参考)
excel(vba)でカラーインデックス、10進値、16進値、RGB値の比較一覧表を作ってみました。 ご参考までにどうぞ。


カラーインデックス比較一覧(ダウンロード)

Sample Site