Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » RGB値を取得するユーザー定義関数

RGB値を取得するユーザー定義関数

VBAでは各種オブジェクトに用意されているColorプロパティを使うことで、オブジェクトの色を表すLong型の数値を取得できます。

これをLong型の数値ではなく、赤・緑・青それぞれの値・RGB値を取得したいということが、結構あります。

「excel2013 vba rgb色取得」
「カラー値からrgbを取得 vba excel2010」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスも時折あります。

VBAのRGB関数に、

RGB値を取得するユーザー定義関数

Red・Green・Blueそれぞれの値を指定することで、各種オブジェクトのColorプロパティに指定するLong値を作れますが、逆の関数は用意されていません。

[スポンサードリンク]

RGB値を取得するユーザー定義関数

そんな、Colorプロパティで取得したようなLong値を、RGB値にするユーザー定義関数を作ってみました。

Function ToRGB(ByVal ColorValue As Long) As String
 Dim r As Byte, g As Byte, b As Byte

 r = ColorValue \ 256 ^ 0 Mod 256
 g = ColorValue \ 256 ^ 1 Mod 256
 b = ColorValue \ 256 ^ 2 Mod 256

 ToRGB = r & "," & g & "," & b
End Function

赤・緑・青の3つの数値を返す必要があるので、戻り値をどうするのかいくつか方法が考えられます。

配列にして返すのが真面目な作りなようにも思いますが、Excelのワークシートからも使うことを考えると、戻り値が配列になっていると使い辛く、それより何らかの文字で区切られたR・G・Bの値が連結された文字列として返されるほうが、使いやすそうなので、戻り値をR・G・Bそれぞれの値を「,」(カンマ)を区切り文字として連結した文字列としました。

R・G・Bそれぞれの値を取得するロジック

ロジック的には、

r = ColorValue \ 256 ^ 0 Mod 256
g = ColorValue \ 256 ^ 1 Mod 256
b = ColorValue \ 256 ^ 2 Mod 256

の部分が、ポイントです。

Windows上の色は、R・G・Bそれぞれに8ビット(10進数の0~255、16進数の00~FF)を割り当てた合計24ビットを使って表現できます。

この値がリトルエンディアンで「B・G・R」の順に、

bbbbbbbb gggggggg rrrrrrrr(1文字が1ビットを表しています)

と、並んでいます。

10進数と16進数で見ると、

Rには 0~255/000000~0000FF
Gには 256~65,535/0000FF~00FFFF
Bには 65,536~16,777,215/00FFFF~FFFFFF

といった数値が、それぞれ割り当てられています。

この数値の並びから、
Rの値だけを取り出しているのが、

r = ColorValue \ 256 ^ 0 Mod 256

Gの値だけを取り出しているのが、

g = ColorValue \ 256 ^ 1 Mod 256

Bの値だけを取り出しているのが、

b = ColorValue \ 256 ^ 2 Mod 256

です。

割り算の商・整数部だけを計算する演算子「\」を使った、
「ColorValue \ 256 ^ 0」の割り算で、

BとGとRの、0~16,777,215/00FFFFFFFFFF

「ColorValue \ 256 ^ 1」の割り算で、

BとGの、256~16,777,215/00FFFF~FFFFFF

「ColorValue \ 256 ^ 2」の割り算で、

Bの、65,536~16,777,215/00FFFF~FFFFFF

を取得して、
演算子「Mod」を使った「〇〇 Mod 256」という、余りだけを求める割り算で、

r = ColorValue \ 256 ^ 0 Mod 256
g = ColorValue \ 256 ^ 1 Mod 256
b = ColorValue \ 256 ^ 2 Mod 256

R・G・Bだけのそれぞれの値を取得しています。

この余りを求めるというのは、(算数で習った)10進数を2進数にする基数変換を行うときに、2で割った余りを並べるのと同じ考え方です。

最終更新日時:2023-04-04 04:26

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » RGB値を取得するユーザー定義関数

「ユーザー定義関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.