色の設定・取得
アップデート(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
[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(x,y)またはrange("**"))
複数のセル範囲は取得出来ません。
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値に変換して取り出す)
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値への変換関数の設定
色の設定・取得(メイン)
セル、フォント、外枠の色の設定・取得(ダウンロード)
excel(vba)でカラーインデックス、10進値、16進値、RGB値の比較一覧表を作ってみました。 ご参考までにどうぞ。
カラーインデックス比較一覧(ダウンロード)