[VBA] Colorプロパティでセルに背景色を設定しましょう

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

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

 セルに色塗りするには Interiorオブジェクト の Colorプロパティまたは ColorIndexプロパティの値を変えます。
 

Colorプロパティ

 Colorプロパティ を使う場合は RGB で指定します。RGB とは Red, Green, Blue の頭文字。つまり赤、緑、青をどれぐらいの配分で混ぜるかを指定するのです。この方法は、大体どんな色になるのか予測しやすいのが利点ですね。たとえばセルA1 を青く塗るならこんな感じ。

'[VBA] セルA1の背景色を青色にします

Sub InteriorBlue()

  Range("A1").Interior.Color = RGB(0, 0, 255)

End Sub

 Red も Green も 0 にして、Blue に最大値 255 を指定しているのです。
 だからセルが真青になるのです。
 

ColorIndexプロパティ

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

'[VBA] セルA1の背景色に10番を指定します

Sub Interior_Red()

  Range("A1").Interior.ColorIndex = 10

End Sub

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

 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色の塗り分け完了

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


 

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)