
VBAでユーザーフォームのラベルの文字色を条件に応じて変更する方法

基本的にはクリックをして何かプログラムを作動させることが少ない「ラベル」ですが、条件に応じてラベルの文字色が赤く目立たせたいと思ったことはありませんか?
例えば、重複した時や最高値・最低値などで注意を促す意味でも目立つようにするなど、色見本を使って色の基本を覚えておけば簡単に色を変えることができますよ。
もちろん、ラベルのプロパティでも簡単にパレットから色を指定できますが、固定化されて条件に応じて変化はできません。

VBAを使いラベルの色を変える
ここでは、ユーザーフォームに配置したコマンドボタンを押すことにより、ラベルの色を変更する方法をご紹介しますが、RGBで色指定するか、colorIndex番号で指定するかの2種類あり、どちらを使っても同じです。
ラベルの色を赤色に変える
数式も条件も何もない基本的な色変更なので、プロパティの設定と同じようになります。
Private Sub CommandButton1_Click()
UserForm1.Label1.ForeColor = RGB(255,0,0)
End Sub
- コマンドボタン1がクリックされたら
- ユーザーフォーム1に配置したラベル1の文字色を赤色にする
- マクロ記録終了

これでユーザーフォーム1に配置したラベル1の文字色(ForeColor)が赤色に(RGBを使って)コマンドボタンを押すと変わります。

条件によりラベルの色を変える
今度は「セルE3とセルE4の値が同じだったら」という条件に応じて、同じ場合は目立つように「赤色文字」異なる値の場合は変更なし(初期設定の黒色文字)とします。
Private Sub CommandButton1_Click()
If Range(“E3”).Value = Range(“E4”).Value Then
UserForm1.Label1.ForeColor = RGB(255,0,0)
End If
End Sub
- コマンドボタン1がクリックされたら
- もしセル「E3」の値とセル「E4」の値が同じだったら
- ユーザーフォーム1に配置したラベル1の文字色を赤色にする
- IFステートメント終了
- マクロ記録終了
このように記載すると、同じ値だったら赤色文字にして、そうでなかった場合は何もしないので黒色文字のままということになります。
2つの条件によりラベルの色を振り分けて変える
先ほどは、2つのセルの値が同じだっと時のみ色変更をいう例を書きましたが、今度はそうでなかった場合にも別の条件を加えることで、できることが増えます。
- セルの値が80点以上の時、「合格」と表示して「青色文字」
- セルの値が30点以下の時、「不合格」と表示して「赤色文字」
上記条件を反映したVBAコードを書くと以下のようになります。
Private Sub CommandButton1_Click()
If Cells(3, 5).Value >= 80 Then
MsgBox “合格”
UserForm1.Label1.ForeColor = RGB(0,0,255)
ElseIf Cells(3, 5).Value <= 30 Then
MsgBox “不合格”
UserForm1.Label1.ForeColor = RGB(255, 0, 0)
End If
End Sub
- コマンドボタン1がクリックされたら
- もし、セルE3の値が80以下だったら
- 「合格」とメッセージを表示する
- ユーザーフォーム1に配置したラベル1の文字色を「青色」にする
- そうではなく、セルE3の値が30以下だったら
- 「不合格」とメッセージを表示する
- ユーザーフォーム1に配置したラベル1の文字色を「赤色」にする
- IFステートメント終了
- マクロ記録終了
ここではセルの値を示すCellsを使用したので、3行目・5列目となり、セルE3を指示していますが、Range(“E3”)と置き換えても問題なく、同じ意味になります。
そして、ElseIfで2つ目の条件を付けて色分けをすることの方が実用的ですよね。
この条件でC3~C12まで順番に繰り返し色変更処理をする、より実践的な方法はマスターしたほうがいいですよ。

判定評価が2つでしたが、通知表みたいに5段階評価したいとなると、If~Thenでもできないことは無いですが、VBAコードがすごく長くなってしまうので、スッキリさせる条件分岐するSelect Caseステートメントを使いましょう。

色見本(ColorIndex一覧)
ColorIndex | RGB | 16進数 | ColorIndex | RGB | 16進数 |
1 | RGB(0,0,0) | #000000 | 29 | RGB(128,0,128) | #800080 |
2 | RGB(255,255,255) | #ffffff | 30 | RGB(128,0,0) | #800000 |
3 | RGB(255,0,0) | #ff0000 | 31 | RGB(0,128,128) | #008000 |
4 | RGB(0,255,0) | #00ff00 | 32 | RGB(0,0,255) | #0000ff |
5 | RGB(0,0,255) | #0000ff | 33 | RGB(0,204,255) | #00ccff |
6 | RGB(255,255,0) | #ffff00 | 34 | RGB(204,255,255) | #ccffff |
7 | RGB(255,0,255) | #ff00ff | 35 | RGB(204,255,204) | #ccffcc |
8 | RGB(0,255,255) | #00ffff | 36 | RGB(255,255,153) | #ffff99 |
9 | RGB(128,0,0) | #800000 | 37 | RGB(153,204,255) | #99ccff |
10 | RGB(0,128,0) | #008000 | 38 | RGB(255,153,204) | #ff99cc |
11 | RGB(0,0,128) | #000080 | 39 | RGB(204,153,255) | #cc99ff |
12 | RGB(128,128,0) | #808000 | 40 | RGB(255,204,153) | #ffcc99 |
13 | RGB(128,0,128) | #800080 | 41 | RGB(51,102,255) | #3366ff |
14 | RGB(0,128,128) | #008080 | 42 | RGB(51,204,204) | #33cccc |
15 | RGB(192,192,192) | #c0c0c0 | 43 | RGB(153,204,0) | #99cc00 |
16 | RGB(128,128,128) | #808080 | 44 | RGB(255,204,0) | #ffcc00 |
17 | RGB(153,153,255) | #9999ff | 45 | RGB(255,153,0) | #ff9900 |
18 | RGB(153,51,102) | #993366 | 46 | RGB(255,102,0) | #ff6600 |
19 | RGB(255,255,204) | #ffffcc | 47 | RGB(102,102,153) | #666699 |
20 | RGB(204,255,255) | #ccffff | 48 | RGB(150,150,150) | #969696 |
21 | RGB(102,0,102) | #660000 | 49 | RGB(0,51,102) | #003366 |
22 | RGB(255,128,128) | #ff8080 | 50 | RGB(51,153,102) | #339966 |
23 | RGB(0,102,204) | #0066cc | 51 | RGB(0,51,0) | #003300 |
24 | RGB(204,204,255) | #ccccff | 52 | RGB(51,51,0) | #333300 |
25 | RGB(0,0,128) | #000080 | 53 | RGB(153,51,0) | #993300 |
26 | RGB(255,0,255) | #ff00ff | 54 | RGB(153,51,102) | #993366 |
27 | RGB(255,255,0) | #ffff00 | 55 | RGB(51,51,153) | #333399 |
28 | RGB(0,255,255) | #00ffff | 56 | RGB(51,51,51) | #333333 |
16進数はワードプレスプラグイン「TinyMCE Advanced」のテーブルに使用するコードから引用しています。