RGB関数でカラー指定。色に関わるVBAとユーザー定義関数

vbargbeyecatch

エクセル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値)カラー値
vbBlack0,0,00
vbRed255,0,0255
vbGreen0,255,065280
vbYellow255,255,065535
vbBlue0,0,25516711680
マゼンダvbMagenta255,0,25516711935
シアンvbCyan0,255,25516776960
vbWhite255,255,25516777215

エクセルシートのセルに色を付ける

例えば、セルB3に「緑色」の背景色設定をする場合

vbargbp001.jpg
セルB3「緑」背景色1
Range("B3").Interior.Color = RGB(0, 255, 0)

と記述します。

Range("B3").Interior.Color = 65280

カラー値による記述ならこのように記述してもOKです。

ちなみに、

リボン(ホームタブ)の背景色の色選択アイコンの標準の色の緑は

セルB3「緑」背景色2

セル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値もカラー値も控えていません。

vbargbp003.jpg
青系の背景色

カラー値を取得する

エクセルVBAを使えば即、カラー値を取得することが出来ます。

VBA
Sub RGBColor01()
    Dim ColorNo As Long
        ColorNo = ActiveCell.Interior.Color
        MsgBox ColorNo
End Sub
vbargbp004.jpg
背景色のカラー値

このコードによりカラー値は「15652797」ということが分かります。

では、この色の近似色を使いたい時は、どのように値を変えたらいい??

RGB値を取得する

RGB値はダイレクトで取得することは出来ません。

一度、カラー値を取得してから、それぞれにR、G、Bの要素を計算することでRGB値を取り出すことになります。

つまり、カラー値からRGB値に変換するためのVBAコードが必要ということになります。

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
vbargbp005.jpg
背景色のRGB値

このコードによりRGB値はRGB(189,215,238)ということが分かりました。

これで、なんとなくB要素の「238」を変えてみようかなとか発想できるようになりました。

ユーザー定義関数で即!RGB値を算出

その都度に、VBAコードを記述してカラー値とRGB値を調べるのは非常に面倒です。

そこで、ワークシートのユーザー定義関数として登録し、セルに数式を代入すれば即座にRGB値が表示されるようにします。

先ほど説明したように、カラー値は計算なしで表示させることが出来ますので、

RGB値を表示させるためのユーザー定義関数を作成するVBAコードです。

この以下のコードをエクセルのVBE(ビジュアルベーシックエディタ)から呼び出す標準モジュールに記述するだけです。

エクセルシートのセルに、代入する関数名は 「=RGB(セル)」 と記述するだけです。(引数のセルは調べたい背景色のあるセル名です)

ユーザー定義関数VBA
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ですよ。)

vbargbp006.jpg
RGBユーザー定義関数

まとめ

エクセルでは、1,600万色の色を扱うことが出来ます。

何かとてもすごいのですが、実際に色を使う時には「テーマの色」とか「標準の色」とか、ほぼお決まりのいつもの色とかだと思います。

任意に決めたその色を再利用したい場合、色チャートに載っていなければ、その色の再指定方法すら難しいことが多いです。

この記事で説明しましたエクセルVBAやユーザー定義関数を利用すれば、RGB要素が判明しますので、「色の設定」の「ユーザー設定」でその色を再現することが可能になります。

コピペで色を張り付ける方法もありますが・・・

使いたい元の色をセルごとコピーして、貼り付け先セルにペーストすることで元の色を再使用することが出来ます。

ただし、どの方法でペーストするかにもよりますが、コピー元のセルの値や書式を引き連れてきますので、その処理が必要になります。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min