【VBA】Colorプロパティでセルに背景色を設定します

 はい。今日はセルを好きな色で塗ってみましょう。
 塗り絵みたいで面白いですよ。
 むらがないように綺麗に塗りましょう。
 Excel だから、むらなんてできるわけないけどね。
 余計なおしゃべりはこのぐらいにして本題に入ります。

【VBA】セルに背景色を指定します

 VBA でワークシートのセルに色を塗りたいときは、Interiorオブジェクト の Colorプロパティまたは ColorIndexプロパティの値を変えます。

【VBA】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 を指定しているのです。だからセルが真青になるのです。

【VBA】ColorIndexプロパティ

 ColorIndex プロパティを使う場合は、あらかじめ色に割り当てられている番号を指定します。たとえばセルA1 の背景色を 10 番に指定してみます。

'[VBA] セルA1の背景色に10番を指定します
Sub Interior_10()
  Range("A1").Interior.ColorIndex = 10
End Sub

 とりあえず適当に色を指定しているだけなので、こばとも 10 番がどんな色なのかさっぱりわかりません。Interior_10() を実行してみましょう。

 VBAのColorIndexプロパティ

 緑色でしたね。でも、どの色にどんな番号が割り振られているかなんて、よっぽどの Excel オタクでもないかぎり覚えていられません。そんなわけで一覧表を表示してみましょう。

'[VBA] ColorIndexのリスト
Sub ColorIndex_List()
  Dim i As Integer
  For i = 1 To 50
    Cells(i, 1).Interior.ColorIndex = i
  Next i
End Sub

 ColorIndex_List() を実行すると …

 ColorIndexの色一覧表

 こんなふうにずらずらと色が並びます。
 行番号がそれぞれの色に対応する番号になっていますよ。
 これを参照しながら好きな色で塗ってくださいな。
 
 そうは言っても、毎回番号を確認しながら色を指定するのはやっぱり面倒ですね。そんなときは、ユーザー定義定数を設定しておくと便利ですよ。たとえば宣言セクションで

Const myRed As Integer = 3

と書いておいて、

'[VBA] セルA1 の背景色を赤にします
Sub Interior_Red()
  Range("A1").Interior.ColorIndex = myRed
End Sub

を実行するとセルA1 が赤く塗り潰されます。
 
 実用面ではある条件をみたすセルにだけ色を塗りたいなというケースが多いですよね。そこで、まず次のようなシートを用意してくださいな。

 VBA色の塗り分けワークシート

 セル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() を実行してみると …

 VBA色の塗り分け完了

 ちゃんと塗り分けられましたね。

コメント

タイトルとURLをコピーしました