ExcelVBA(マクロ)でフォント・背景の色を変更する方法/ColorIndex・Colorプロパティの使い方、色の作り方と色番号

IT

vba経由でExcelのフォント、背景の色を変更する方法のご紹介です。
マクロ・VBAの作り方自体がわからない方は下記をご参照ください。

ExcelでVBA(Visual Basic for Applications)を使う方法/マクロを記録する方法、そもそもVBAとは何か?
Visual Basicとはプログラミング言語のひとつで、これをアプリケーション(=ソフト。ここではExcelのことですが、wordなどでも使えます)で使えるように組み込んだもののことです。 Visual Basicにfor Applic...
Advertisements

ColorIndexプロパティの使い方

「対象」の「フォント」or「背景」の「色」を変更するという書式で記述します。FontをInteriorにすると背景色を変更することができますし、対象にはRangeの他にCellやSelectionなどを指定することもできます。

フォントの色を変更する(色番号)
対象.Font.ColorIndex = 色番号

背景の色を変更する(色番号)
対象.Interior.ColorIndex = 色番号
※色番号0は「塗りつぶしなし」

vbafontcl1
色を変えるためのテキストを用意しておきます。
vbafontcl2
開発タブ→マクロからマクロを作成し、
Range(“B2”).Font.ColorIndex = 50
B2フォント色番号50に変更する)と入力します。
vbafontcl3
実行するとフォントの色が変更されました。

色番号とは

色番号
デフォルトでExcelについてるパレットの色で、56色用意されています。57以降はエラーになります。0は「塗りつぶしなし」(デフォルト値)になります。
1は黒、2は白、3は赤、4は緑……とそれぞれの数値に色が割り振られています。
上の表もマクロで作っています。ちょっと脱線しますが、A列に1~56の色番号を出力するだけならFor文を使った簡単なコードでできますので、ご参考までに書いておきます。

' vba
' 1から56まで繰り返し処理を実行
For i = 1 to 56
Range("A" & i).Interior.ColorIndex = i
Next i

背景色の変更をするのでInterior.ColorIndexを使用しています。For nextは1回処理を実行するたびに変数を1増やし、所定の数が終わったらループを終了する命令です。ここでは繰り返しの変数をiとして、そのiをセルの番号(A1,A2..)、色番号(ColorIndex = 1、2…)としても利用しています。

数値以外でColorIndexを指定

ColorIndexプロパティには定数として、xlColorIndexAutomaticxlColorIndexNoneが用意されています(xlColorIndex列挙型定数)。

xlColorIndexAutomatic

colorindex1
xlColorIndexAutomaticを使用する場面はあまりないと思います。
ためしにフォントと背景にそれぞれ適用してみると、
colorindex2
背景が白で塗りつぶし、フォントは黒になりました。
colorindex3
フォントに関しては、これを実行しています。「自動」はPCのメッセージの表示色に準拠するらしいので、設定いじってなければ黒になります。
colorindex4
背景には「自動」は見当たらないのですが、デフォルトで白になるようです。

xlColorIndexNone

colorindex5
xlColorIndexNoneは「塗りつぶしなし」です。これも数値で0と書くほうが楽なのでまず使いません。
colorindex6
実行すると背景は塗りつぶしなしになり、文字色は変化しません
colorindex7
少し色をいじってもう一度実行すると、
colorindex8
背景は再度塗りつぶしなしになりますが、文字色はキープされます。一応エラーにはなりませんが、フォントには使用できない定数です。

Colorプロパティの使い方

こちらはRGBで色指定をする方法です。RGBでは引数の中に3つ値を指定しますが、それぞれRed、Green、Blueです。それぞれ0~255まで設定でき、値が大きくなるほどその色が強くなります。

フォントの色を変更する(RGB)
対象.Font.Color = RGB(R,G,B)

背景の色を変更する(RGB)
対象.Interior.Color = RGB(R,G,B)

vbafontcl11
Range(“B2”).Font.Color = RGB(150,150,150)
B2フォント灰色に変更)と入力、実行するとフォントの色が変更されます

RGBの確認方法・基本ルール

RGBについては「RGB」などで検索するのが一番お手軽ですが、パレット内でも確認することができます。

vbafontcl4
カラーパレットを開き、その他の色をクリックします。
vbafontcl5
ユーザー設定タブを選びます。下にある赤、緑、青がRGBです。
vbafontcl6
光の三原色により0,0,0は真っ黒になり、255,255,255は真っ白になります。
vbafontcl7
メインカラーを255、他を0にすると、ピュアなその色になります。
vbafontcl8
2色を255、残り1つを0にすると、ピュアな混合色になります。
vbafontcl9
メインカラーとサイドカラーの数値の間隔が狭くなると、彩度が下がります。
vbafontcl10
メインカラーの数値が低くなると、明度が下がります。

元からある色に対して、明度だけを変更したい場合

TintAndShadeプロパティを使うことで、対象の明度だけを上下させることが可能です(数値は-1~1まで)。

フォントの明度を変更する
対象.Font.TintAndShade = 数値(-1~1)

背景の明度を変更する
対象.Interior.TintAndShade = 数値(-1~1)

tint2
あらかじめマクロを実行し、A1セルを灰色に塗っておきます。
tint3
Range(“A1”).Interior.TintAndShade = 0.5A1背景明度5割上げると記述し、実行します。
tint4
すると該当セルの明度だけが上がります。元の色より暗くしたい場合は-0.5のように、マイナス方向で指定します。

色を直接指定するのではなく相対的に明度を上下させるので、アニメーションのような効果を持たせたり、日数がたつと段々セルが暗くなっていったり……といった効果を加えることが可能です。

色塗り応用編

一行ごとに色を塗る記事を作成しました。IfとFor Nextを使用します。

ExcelVBA(マクロ)で一行おきに色を付ける方法/Color、For Next文、If文の組み合わせ方
テーブルなどでおなじみの縞々を、マクロで作ってみようという企画です。For next、Ifを使うので、工夫しだいで色んな処理に流用できます。

VBAによる文字色・背景色の変更については以上です。

やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント