作りながら学ぶVBAプログラミング

ColorプロパティとRGB関数

VBAでColorとか使いたくないのは、書き込みと読み取りの関係がアンマッチだから。
結論を言えば、VBAのセルに対するColorプロパティは、書き込みと読み込みが一致しない。


つまり、
.Color = RGB(0,0,255) ‘ HEX で &H0000FF
で書き込んでも
読み込むと
&H0000FF で書き込んだものが &HFF0000 で戻ってくる。

RGBで書き込むと BGR で戻ってくるって怪奇な現象www

Colorプロパティの読み込み

いつまでも色を変えるのをよけるのもどうかと思ってセルの色を読み込むサブルーチンを書いてみた。

Function Get_Color(ssht, sr, sc)
Dim buff
buff = Right("000000" + Hex(ssht.Cells(sr, sc).Font.color), 6)
buff = Mid(buff, 5, 2) + Mid(buff, 3, 2) + Mid(buff, 1, 2)
buff = CLng("&h" + buff)
Get_Color = buff
End Function
Function Get_BackGround(ssht, sr, sc)
Dim buff
buff = Right("000000" + Hex(ssht.Cells(sr, sc).Interior.color), 6)
buff = Mid(buff, 5, 2) + Mid(buff, 3, 2) + Mid(buff, 1, 2)
buff = CLng("&h" + buff)
Get_BackGround = buff
End Function



Get_Color で文字色、Get_BackGround で背景色を読み込む。
結果は、色の数値で返ってくる。

16進変換するときには、こう書きます。

Dim ssht,sr,sc
set ssht = ActiveSheet
sr = 1
sc = 2
Dim ColorVal
Dim ColorHex
Dim ColorHx6
Dim ColorHxU
ColorVal = Get_BackGround(ssht, sr, sc) ' 色のよみこみ 
ColorHex = Hex(ColorVal) ' 16進変換
ColorHx6 = right("000000"+ColorHex,6) ' 6桁の16進に変換
ColorHxU = Ucase( ColorHx6 ) ' 大文字英数変換



Colorプロパティの設定

Colorプロパティを設定するときも長いんだよね。

文字色は、Font プロパティ
背景色は、Interior プロパティ (なんで背景がインテリアなのかわからんが・・・)

ssht.cells(sr,sc).Font.Color = RGB(0,0,255)
ssht.cells(sr,sc).Interiro.Color = RGB(255,0,255)


ColorプロパティとRGB関数

エクセルVBA の セルに対する Colorプロパティは、設定時と読み込み時でパラメータの形が違うということを覚えておきたいですね。

ただし、これはあきらかにおかしな仕様なので、もしかしたら 2013 以降では変わっているのかもしれない。
とりあえず、今私が使っているエクセルの 2013 では、こういった現象が出ています。


Cell 関連 サブルーチンライブラリ ダウンロード

記事内の セルの色を取り扱うサブルーチンのサブルーチンライブラリ の Cell_Line.bas です。

Cell_Line.bas の詳細とダウンロードは、こちらにあります。

VBA セル色と枠線制御 Cell Line Bas サブルーチン ライブラリ

  • このエントリーをはてなブックマークに追加

関連記事

ゆずまる・ゆぅべぇ

システムエンジニア/プログラマ歴数十年のゆずまるです。

バナーにもあるように変体的な犬マニアで生まれてからこのかた犬のいない日は経験していません。
中でもコッカースパニエルとラブラドールが死ぬほど好き!

そんなゆずまるは、20数種類の様々な言語を使用してシステム開発をおこなってきました。

そこで使ってきた各言語の自作ライブラリ中のVBAのライブラリを公開しています。

※姉妹サイトに C,PHP などのサイトもネット上に浮遊させております。そちらでもお役にたてましたら無上の喜びw

あなたの一助になれば幸いです。