はい。今日は Excel VBA でセルを好きな色で塗ってみましょう。
塗り絵みたいで面白いですよ。
むらがないように綺麗に塗りましょう。
Excel だから、むらなんてできるわけないけどね。
余計なおしゃべりはこのぐらいにして本題に入ります。
【VBA】セルに背景色を指定します
VBA でワークシートのセルに色を塗りたいときは、Interiorオブジェクト の Colorプロパティまたは ColorIndexプロパティの値を変えます。
【VBA】Interior.Color
Color プロパティを使う場合は RGB で指定します。RGB とは Red, Green, Blue の頭文字。つまり赤、緑、青をどれぐらいの配分で混ぜるかを指定するのです。この方法は、大体どんな色になるのか予測しやすいのが利点ですね。たとえばセルA1 を青く塗るならこんな感じ。
'[VBA] セルA1の背景色を青色にします Sub Interior_Blue() Range("A1").Interior.Color = RGB(0, 0, 255) End Sub
Red も Green も 0 にして、Blue に最大値 255 を指定しているのです。だからセルが真青になるのです。
対話形式で学ぶInterior.Color
こばと: こんにちは、涼音さん。VBAのInterior.Colorについて質問があるんですね。どのようなことについて知りたいんですか?
涼音: Interior.Colorって何ですか? VBAでどのように使用するんですか?
こばと: Interior.Colorは、Excelのセルや図形の背景色を設定するためのプロパティです。VBAでは、このプロパティを使用して特定のセルや図形の背景色を変更できます。例えば、条件に応じてセルを色付けする場合などに便利ですよ。
涼音: なるほど、セルや図形の背景色を変えるんですね。具体的な使い方を教えてください。
こばと: まず、セルの背景色を変える例を見てみましょう。
Sub ChangeCellColor() Range("A1").Interior.Color = RGB(255, 0, 0) ' セルA1の背景色を赤に設定 End Sub
上記のコードでは、Range(“A1”).Interior.Color を使用して、セル A1 の背景色を赤に設定しています。RGB 関数は、赤、緑、青の値を指定して色を作成するために使用されます。
涼音: なるほど、RGB 関数で色を指定するんですね。他にも便利な使い方はありますか?
こばと: 定義済みのカラーコードを使用することもできます。例えば、次のようなコードでセルの背景色を黄色に設定できます。
Sub ChangeCellColor() Range("A1").Interior.Color = vbYellow ' セルA1の背景色を黄色に設定 End Sub
vbYellow は VBA で定義されたカラーコードの一つで、黄色を表しています。
涼音: なるほど、便利なカラーコードがあるんですね。それから、図形の背景色を変える方法も知りたいです。
こばと: 図形の背景色を変える方法も似ていますよ。例えば、次のコードで図形の背景色を青に設定できます。
Sub ChangeShapeColor() ActiveSheet.Shapes("Rectangle 1").Fill.ForeColor.RGB = RGB(0, 0, 255) ' 図形の背景色を青に設定 End Sub
上のコードでは、図形の名前が “Rectangle 1” である場合に、Fill.ForeColor.RGB を使用して背景色を設定しています。
涼音: 背景色を削除する方法はありますか?
こばと: セルや図形の背景色を削除するには、以下のように設定します。
Sub ClearColor() Range("A1").Interior.Color = xlNone ' セルA1の背景色を削除 ActiveSheet.Shapes("Rectangle 1").Fill.ForeColor.RGB = RGB(255, 255, 255) ' 図形の背景色を削除 End Sub
ClearColor()では、xlNone を使用してセルの背景色を削除し、RGB(255, 255, 255) を使用して図形の背景色を白に設定しています。
涼音: こばとさんの心も白くなるといいですね。
こばと: 余計なお世話ですよ!
【VBA】Interior.ColorIndex
ColorIndex プロパティを使う場合は、あらかじめ色に割り当てられている番号を指定します。たとえばセルA1 の背景色を 10 番に指定してみます。
'[VBA] セルA1の背景色に10番を指定します Sub Interior_10() Range("A1").Interior.ColorIndex = 10 End Sub
とりあえず適当に色を指定しているだけなので、こばとも 10 番がどんな色なのかさっぱりわかりません。Interior_10() を実行してみましょう。
緑色でしたね。でも、どの色にどんな番号が割り振られているかなんて、よっぽどの Excel オタクでもないかぎり覚えていられません。そんなわけで一覧表を表示してみましょう。
'[VBA] ColorIndexのリスト Sub ColorIndexList() Dim i As Integer For i = 1 To 50 Cells(i, 1).Interior.ColorIndex = i Next i End Sub
ColorIndexList() を実行すると …
こんなふうにずらずらと色が並びます。
行番号がそれぞれの色に対応する番号になっていますよ。
これを参照しながら好きな色で塗ってくださいな。
そうは言っても、毎回番号を確認しながら色を指定するのはやっぱり面倒ですね。そんなときは、ユーザー定義定数を設定しておくと便利ですよ。たとえば宣言セクションで
Const myRed As Integer = 3
と書いておいて、
'[VBA] セルA1 の背景色を赤にします Sub Interior_Red() Range("A1").Interior.ColorIndex = myRed End Sub
を実行するとセルA1 が赤く塗り潰されます。
実用面ではある条件をみたすセルにだけ色を塗りたいなというケースが多いですよね。そこで、まず次のようなシートを用意してくださいな。
セルB2 から D4 の範囲で「赤」という文字が入力されているセルは赤色、「青」という文字が入力されているセルは青色、何も入力されていないセルは黄色で塗ることにします。こういう場合は For…Each…Nextステートメントを使うと便利です。
Const myRed As Integer = 3 Const myBlue As Integer = 5 Const myYellow As Integer = 6 '[VBA] 条件をみたすセルを色で塗り分けるマクロ Sub Red_Blue_Yellow() Dim myrange As Range For Each myrange In ActiveSheet.Range("B2:D4") If myrange.Value = "赤" Then myrange.Interior.ColorIndex = myRed ElseIf myrange.Value = "青" Then myrange.Interior.ColorIndex = myBlue Else myrange.Interior.ColorIndex = myYellow End If Next End Sub
Red_Blue_Yellow() を実行してみると …
ちゃんと塗り分けられました。
会話形式で学ぶInterior.ColorIndex
涼音: VBAのInterior.ColorIndexについて教えてください。どのように使うんですか?
こばと: Interior.ColorIndexは、Excelのセルや図形の背景色を設定するためのプロパティです。このプロパティを使うと、カラーパレット内の特定のインデックスを指定して背景色を設定できます。まず、セルの背景色をインデックスを使って変更する例を見てみましょう。
Sub ChangeCellColor() Range("A1").Interior.ColorIndex = 3 ' セルA1の背景色を赤に設定 End Sub
ChangeCellColor()では、Range(“A1”).Interior.ColorIndexを使用して、セルA1の背景色をカラーパレットのインデックス3に設定しています。この場合、インデックス 3 は赤色を示しています。
涼音: 他にどのようなインデックスがありますか?
こばと: Excelのカラーパレットには全部で56個のインデックスがあります。それぞれが異なる色を表しています。たとえば、以下のコードでセルの背景色を緑色に設定できます。
Sub ChangeCellColor() Range("A1").Interior.ColorIndex = 4 ' セルA1の背景色を緑に設定 End Sub
インデックス 4 は緑色を示しています。
涼音: 便利ですね、たくさんの色を簡単に使えそうです。
こばと: そうですね、カラーパレットのインデックスを使用することで、様々な色を簡単に設定できます。もちろん、RGB関数を使用して色を指定する方法もありますが、インデックスを使うとよりシンプルになります。
涼音: 背景色を削除する方法はありますか?
こばと: ありますよ。背景色を削除するには、インデックス0を使用します。以下のコードでセルの背景色を削除できます。
Sub ClearColor() Range("A1").Interior.ColorIndex = 0 ' セルA1の背景色を削除 End Sub
インデックス 0 は、背景色なしを示しています。
涼音: なるほど。こばとさんの心もインデックス0になるといいですね。
こばと: 前回と同じことを、わざわざVBA用語を使って言わくていいですよ!
コメント
【AI連載小説】生田目次郎のエクセル奮闘記(12)
「セルに色を塗る方法がわかりません」
ある日、次郎はエクセルでセルに色を塗る方法が分からずに戸惑っていました。同僚の省吾も忙しそうで手が離せない状況でした。そこに通りかかった後藤課長が、いつものように嫌味っぽい口調で言ってきました。
「おい、次郎。セルに色を付けることも分からないのか?それくらいのことも覚えておかないと、仕事にならないぞ」
次郎は戸惑いながらも、謝罪しながら質問しました。
「すみません、課長。どうやってセルに色を付けるんでしょうか?」
「はぁ、要領が悪いな。まず、セルを選択して、ホームタブの『塗りつぶしのバケツ』アイコンをクリックするんだ」
後藤課長は手を動かしながら説明しました。
「そこで色を選べばいい。分かるか? 簡単なことだろう。」
「はい、分かりました。ありがとうございます。」
後藤課長は小馬鹿にしたような笑みを浮かべながら去っていきました。次郎は戸惑いながらも、後藤課長の指示に従い、セルに色を付ける方法を覚えました。