エクセルVBAでは色数は1600万色扱うことが出来ます。
そしてRGB関数を使えば色を細かく設定することも出来ます。
さらにユーザー定義関数にセットすれば利用度UPです。
こんにちは じゅんぱ店長 (@junpa33) です。
エクセルVBAのRGB関数の基本と、RGB関数を利用したユーザー定義関数についてです。
色のRGB表記とエクセルカラー値の関係性、変換のためのVBAコードを紹介します。
エクセルシート上から、セルの背景色は、リボンの塗りつぶしボタンから色チャートで選択することが出来ますが、
VBAコードを使って指定するときには、このRGB関数を知っておくことが必要になります。
またユーザー定義関数を使えばエクセルシート上でRGB値を知ることが出来ます。
コンテンツ
RGB関数は3色で色を指定する関数
エクセルVBAでセルの背景色を指定することはそんなに難しい事ではありません。
Rangeオブジェクトに対して色をつかさどるプロパティで色番号を指定するだけです。
その色を指定する方法にはいくつかの方法があります。その中でRGB表記での指定方法があります。
RGB関数について
RGB関数は、R(赤色)、G(緑)、B(青)の3つの要素によって色を指定する関数です。
RGB関数の構文
RGB ( R(赤色),G(緑),B(青) )
R、G、B の引数については0から255までの整数値を指定します。選択できるのは合計256階調となります。
(値が 255 を超えると、その値は 255 と見なされます。)
したがって、RGB関数で指定できる色数は、256x256x256の1600万色(16,777,216色)が可能ということです。
RGB関数の戻り値は、長整数型の値(カラー値)となります。
例えば、白色 RGB(255,255,255) は、カラー値「16777215」です。
指定色(一般名称)、定数、RGB値、カラー値の関係は以下のようになります。
指定色 | 色表示 | 定数 | RGB(R値, B値, G値) | カラー値 |
---|---|---|---|---|
黒 | vbBlack | 0,0,0 | 0 | |
赤 | vbRed | 255,0,0 | 255 | |
緑 | vbGreen | 0,255,0 | 65280 | |
黄 | vbYellow | 255,255,0 | 65535 | |
青 | vbBlue | 0,0,255 | 16711680 | |
マゼンダ | vbMagenta | 255,0,255 | 16711935 | |
シアン | vbCyan | 0,255,255 | 16776960 | |
白 | vbWhite | 255,255,255 | 16777215 |
エクセルシートのセルに色を付ける
例えば、セルB3に「緑色」の背景色設定をする場合
Range("B3").Interior.Color = RGB(0, 255, 0)
と記述します。
Range("B3").Interior.Color = 65280
カラー値による記述ならこのように記述してもOKです。
ちなみに、
リボン(ホームタブ)の背景色の色選択アイコンの標準の色の緑は
セルB5の緑色とセルB7の緑色になります。
VBAコードでの記述指定は、
Range("B5").Interior.Color = RGB(146, 208, 80)
'または
Range("B5").Interior.Color = 5296274
Range("B7").Interior.Color = RGB(0, 176, 80)
'または
Range("B7").Interior.Color = 5287936
となります。
セル背景色のRGB値やカラー値を調べる
エクセルで作業する中で、着色したセルの背景色と同じ色を別セルに適用させたい場合、その色を再指定するのに苦労する場合があります。
はじめにその色のRGB値やカラー値をメモしていれば問題ないですが、そうではない場合の方が多いでしょう。
セルB3に青色系の背景色をセットしました。RGB値もカラー値も控えていません。
エクセルVBAを使えば即、カラー値を取得することが出来ます。
Sub RGBColor01()
Dim ColorNo As Long
ColorNo = ActiveCell.Interior.Color
MsgBox ColorNo
End Sub
このコードによりカラー値は「15652797」ということが分かります。
では、この色の近似色を使いたい時は、どのように値を変えたらいい??
RGB値はダイレクトで取得することは出来ません。
一度、カラー値を取得してから、それぞれにR、G、Bの要素を計算することでRGB値を取り出すことになります。
つまり、カラー値からRGB値に変換するためのVBAコードが必要ということになります。
Sub RGBColor02()
Dim Rno, Gno, Bno As Long
Dim ColorNo As Long
Dim RGBstyle As String
ColorNo = 15652797
Rno = ColorNo Mod 256
Gno = (ColorNo \ 256) Mod 256
Bno = (ColorNo \ 256) \ 256
RGBstyle = "RGB(" & Rno & "," & Gno & "," & Bno & ")"
MsgBox RGBstyle
End Sub
このコードによりRGB値はRGB(189,215,238)ということが分かりました。
これで、なんとなくB要素の「238」を変えてみようかなとか発想できるようになりました。
ユーザー定義関数で即!RGB値を算出
その都度に、VBAコードを記述してカラー値とRGB値を調べるのは非常に面倒です。
そこで、ワークシートのユーザー定義関数として登録し、セルに数式を代入すれば即座にRGB値が表示されるようにします。
先ほど説明したように、カラー値は計算なしで表示させることが出来ますので、
RGB値を表示させるためのユーザー定義関数を作成するVBAコードです。
この以下のコードをエクセルのVBE(ビジュアルベーシックエディタ)から呼び出す標準モジュールに記述するだけです。
エクセルシートのセルに、代入する関数名は 「=RGB(セル)」 と記述するだけです。(引数のセルは調べたい背景色のあるセル名です)
Function RGB(セル As Range) As String
Dim ColorNo, Rno, Gno, Bno As Long
ColorNo = セル.Interior.Color
Rno = ColorNo Mod 256
Gno = (ColorNo \ 256) Mod 256
Bno = (ColorNo \ 256) \ 256
RGB = "RGB(" & Rno & "," & Gno & "," & Bno & ")"
End Function
こんな感じに表示されます。(表示させるセル位置はどこでもOKですよ。)
まとめ
エクセルでは、1,600万色の色を扱うことが出来ます。
何かとてもすごいのですが、実際に色を使う時には「テーマの色」とか「標準の色」とか、ほぼお決まりのいつもの色とかだと思います。
任意に決めたその色を再利用したい場合、色チャートに載っていなければ、その色の再指定方法すら難しいことが多いです。
この記事で説明しましたエクセルVBAやユーザー定義関数を利用すれば、RGB要素が判明しますので、「色の設定」の「ユーザー設定」でその色を再現することが可能になります。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。