ヘルプの森~Excel・Access・Office全般ヘルプデスクサイト

No.017

ColorプロパティとRGB関数について、Color値からRGB、RGBからColor値を求める方法 《Color・RGB関数》

2003/2007/2010/2013/2016/2019

セルの色などの色設定は、VBAの記述では Color プロパティ を使用します。

まずは、Color プロパティ の設定方法をおさらいします。
例えば、セルに塗りつぶしの色を設定する場合
  セル参照.Interior.Color = 設定値
となります。

右辺の設定値の書き方にいくつか方法がありますので、以下に箇条書きします。
RGB 関数 については後述、以下、対象セルの塗りつぶしの色に生粋の青を設定する場合です。

塗りつぶしの色
  • RGB 関数 の答えの値を指定(10進数)...
     対象セル.Interior.Color = 16711680
  • RGB 関数 をそのまま指定 ...
     対象セル.Interior.Color = RGB(0,0,255)
  • RGB 関数 の答えを指定(&H のあとBGRの順に16進数)...
     対象セル.Interior.Color = &HFF0000
  • 色を表す定数を指定 ...
     対象セル.Interior.Color = vbBlue

セルの色を青に設定するマクロ記録を行うと、1番目の RGB 関数 の答えの値「16711680」が記述されるわけですが、この値がどのようにして求められているのか、まずは RGB 関数 についてご案内します。

<RGB 関数>
RGB 関数 の引数は、順番に赤(R)、緑(G)、青(B)です。
それぞれの引数には 0~255 までの数値を設定します。
上記箇条書きの2番目のような設定です。

セルの色を生粋の青という場合、[塗りつぶしの色] の [その他の色] をクリック、[色の設定]ダイアログ ボックスの [ユーザー設定]タブ にある [赤][緑][青]の値が、順に 0, 0, 255 と設定されている状態です。

この青の場合の RGB 関数 の数値の答えを導く計算式は、次の式となります。

  256*256*青の数値 + 256*緑の数値 + 赤の数値

256*256 は、256の2乗で、65536 という値です。したがって、青の場合の計算は
  65536*255 + 256*0 + 0 = 16711680
ということなのです。

<Color プロパティ の設定値を求める>
セルに色がもともと設定してあるときに、その色の Color プロパティ の設定値(RGB 関数 の値)を取得したい場合や、同じ色に設定したい場合です。
Color プロパティ は設定と取得が両方できますので、簡単です。

セルA1の塗りつぶしの色の Color プロパティ の設定値を取得するには、   Range("A1").Interior.Color
セルA1の色と同じ色を、セルC1に設定するには、   Range("C1").Interior.Color = Range("A1").Interior.Color
となります。

<Color プロパティ の設定値から RGB を求める>
取得された Color プロパティ の設定値、つまり RGB 関数 の答えから、RGBそれぞれの値を求める式とVBAをご案内します。
例えば、Color プロパティ の設定値が「9051535」となる色の RGB を求めてみます。

RGB 関数 は、
  65536*青の数値 + 256*緑の数値 + 赤の数値
の計算値です。

青から順に式で求めていきます。
  青 ...= Int(9051535 / 65536) = 138
青は、Color プロパティ の設定値 を 65536 で割り、小数値を切り捨てた値で、今回 138 です。
  緑 ...= Int((9051535 - 65536 * 138) / 256) = 29
緑は、Color プロパティ の設定値 から青の値を引き、その値を 256 で割って小数値を切り捨てた値、今回 29 です。
  赤 ...= 9051535 - (65536 * 138) - (256 * 29) = 143
赤は、Color プロパティ の設定値 から青の値と緑の値を引いた値、今回 143 となります。

<VBA で選択セルの Color プロパティ の設定値と RGB を取得>

では最後、VBAでご紹介します。
選択しているセルの、塗りつぶしの色の Color プロパティ の設定値(変数 ColNo)と 各R(変数 ColR)G(変数 ColG)B(変数 ColB) の値を各変数に求めます。
各値は今回メッセージ(2回)で表示しています。


Sub sample()

	Dim ColNo As Long
	Dim ColR As Integer, ColG As Integer, ColB As Integer

	ColNo = Selection.Interior.Color
	MsgBox "color:" & ColNo

	ColB = Int(ColNo / 65536)
	ColG = Int((ColNo - 65536 * ColB) / 256)
	ColR = ColNo - (65536 * ColB) - (256 * ColG)
	MsgBox "赤:" & ColR & " /緑:" & ColG & " /青:" & ColB

End Sub
VBA RGB関数
twitter hatena line pocket

関連ヘルプ

ブック内のすべてのワークシートで同じ処理を行う 《For Each~Next》
ブックを開くとき、閉じるときにマクロを自動実行したい 《イベント プロシージャ》
データを快速で検索するには 《Find》
アプリケーションを起動し動作させる 《Shell・SendKeys・Wait》
エラーの種類、そしてエラー処理の設置方法について 《On Error GoTo》
InputBox のテキスト ボックス入力時に日本語入力をオンにする 《SendKeys》
Excelのデータをテキスト ファイルに書き出す(出力する) 《Open・Print・Close》
ExcelからOutlookでメールを作成・送信する基本のVBA 《CreateObject関数》
Excelのメールアドレス データを使用し、Outlookのメールを自動送信する 《CreateObject関数》
ソートしたグループごとのデータを別ブックに分割するサンプルVBA
右クリック、印刷、上書き保存などブックに規制をかける 《イベント プロシージャ Cancel=True》
フォルダー内のすべてブックを開いて同じ処理を行う 《Do~Loop・Dir》
フォルダー内のすべての画像ファイルをペイントで開きサイズ変更
フォルダー内のフォルダーとファイルの一覧をセルに書き出す1 《Dir》
フォルダー内のフォルダーとファイルの一覧をセルに書き出す2 《FileSystemObject》
フォルダー内のファイル名を変更する 《Do~Loop・Dir・Name~As》